2013-04-10 36 views
0

我用PerpetuumSoft打印多份報告,但我得到以下異常:指數數組的邊界之外,在打印過程中

Index was outside the bounds of the array.Stack Trace :at System.Drawing.Printing.PrinterSettings.StringCollection.get_Item(Int32 index) 

我的代碼:

PrintReportSample.ReportPrintDocument RP = new PrintReportSample.ReportPrintDocument(lectReport);      
    string pr = System.Drawing.Printing.PrinterSettings.InstalledPrinters[1].ToString(); 
    RP.PrinterSettings.PrinterName = pr; 
    RP.DefaultPageSettings.Landscape = true; 
    RP.DefaultPageSettings.PaperSize.Width = 11; 
    RP.Print(); 

我想識別客戶端的默認打印機,而不是服務器。

我只在服務器上面對這個問題,一切順利!


編輯:

根據答案:

string pr = System.Drawing.Printing.PrinterSettings.InstalledPrinters[0].ToString(); 

IT負載很長一段時間,並沒有什麼發生在所有的,我沒有得到任何的異常?


本地當我嘗試打印,保存XPS文檔窗口」出現

+2

'InstalledPrinters [1]'應'InstalledPrinters [0]' – 2013-04-10 09:40:53

+0

你應該檢查'.InstalledPrinters.Any()'或'.InstalledPrinters.Length> 0'到驗證有,實際上,嘗試使用它之前安裝的打印機。 – 2013-04-10 09:52:59

+0

是啊這個代碼在本地工作,但我發佈時得到這個異常。我嘗試'0'的索引,但它需要很長時間,然後我很長一段時間後'請求超時! – 2013-04-10 09:56:50

回答

1

您正在試圖從拉不存在,在這條線在這裏數組元素的值。

string pr = 
    System.Drawing.Printing.PrinterSettings.InstalledPrinters[1].ToString(); 

您假定InstalledPrinters屬性中至少有兩個值。

我還懷疑你應該看看數組中的第一個元素。

string pr = 
    System.Drawing.Printing.PrinterSettings.InstalledPrinters[0].ToString(); 

無論使用哪種方法,您都應該在使用前防禦性地檢查值是否存在。

if (System.Drawing.Printing.PrinterSettings.InstalledPrinters != null && 
    System.Drawing.Printing.PrinterSettings.InstalledPrinters.Count > 0) 
{ 
    // Do your work here 
} 
+0

'System.Drawing.Printing.PrinterSettings.InstalledPrinters [1] .ToString();'在本地工作,但我發現這個異常,當我發佈,我嘗試索引'0'只是'....等待'超時! ! – 2013-04-10 09:54:10

+0

即使在本地主機上,它也不起作用! – 2013-04-10 10:02:59

1

確保用戶具有任何安裝的打印機,如果你想,採取的第一個(索引0!),你只要在第二個打印機不管是什麼。

+0

即使在本地主機上,它也無法工作! – 2013-04-10 10:04:30

1

看着好像代碼,你必須爲你選擇打印機打印OutOfBound問題。類別/陣列在C#是零界指數。

此外,你甚至應該確保安裝了printer(s)

所以,

InstalledPrinters[1] 

應該

//assuming that there is at least one printer installed 
InstalledPrinters[0] 
+0

'System.Drawing.Printing.PrinterSettings.InstalledPrinters [1] .ToString();'在本地工作,但我發現這個異常,當我發佈,我嘗試索引'0'只是'....等待'超時! ! – 2013-04-10 09:54:59

+0

即使在本地主機上,它現在也不起作用! – 2013-04-10 10:04:07