[英]c# Index was outside the bounds of the array
您好,如果我將itemWS.getItemInfo(itemLis [i] .ToString())中的值(i)放入,我將收到“索引超出數組范圍”
object[] itemDetails;
object[] itemLis = itemsWS.searchItem("", "bread", "all");
int xs = 35;
int clefts = 0;
for (int i = 0; i < itemLis.Length; i++)
{
itemDetails = itemsWS.getItemInfo(itemLis[i].ToString());
Button myButtons = new Button();
myButtons.Click += delegate
{
dataGridView1.ColumnCount = 11;
dataGridView1.Columns[0].Name = "Item Code";
dataGridView1.Columns[1].Name = "Description";
dataGridView1.Columns[2].Name = "Sale Price";
dataGridView1.Columns[3].Name = "Category";
dataGridView1.Columns[4].Name = "Type";
dataGridView1.Columns[5].Name = "Status";
dataGridView1.Columns[6].Name = "Low Count";
dataGridView1.Columns[7].Name = "Medium Count";
dataGridView1.Columns[8].Name = "High Count";
dataGridView1.Columns[9].Name = "Item Picture";
dataGridView1.Columns[10].Name = "TEST";
//here is where i'm getting error if i put i on the []
itemDetail = itemsWS.getItemInfo(itemLi[i].ToString());
//
dataGridView1.Rows.Add(itemDetail);
MessageBox.Show("data grid displayed!");
};
myButtons.Text = itemDetails[1].ToString() + "\n " + itemDetails[2].ToString();
myButtons.Top = cleft * 180;
myButtons.Left = 70;
myButtons.Location = new Point(xs, clefts);
myButtons.Size = new Size(100, 60);
tabPage1.Controls.Add(myButtons);
xs += 135;
if (xs >= 537)
{
xs = 35;
clefts += 80;
}
(這是數據庫)
問題是如果我將[i]替換為[0]。 它將僅顯示數據庫中的第一個值項目
(如果我將[i]替換為[0],則為GUI)單擊任何按鈕將重復相同的輸出
請任何幫助將不勝感激。 我正在嘗試使用生成的新按鈕顯示來自MySQL的項目,這些按鈕將顯示在datagridview上。 謝謝
嘗試將i的值存儲在委托示例內的局部變量中:
myButtons.Click += delegate
{
…
int local_i = i;
itemDetail = itemsWS.getItemInfo(itemLis[local_i].ToString());
…
}
實際執行委托時,i的值可能超出范圍。
更新:無法看到應用程序中的所有其他代碼,很難確定,但可能是委托執行時itemLis不再包含該索引處的項目。
嘗試使用foreach循環,這樣,當委托執行時,您將不會從itemLis數組中檢索項目。
foreach (var item in itemLis)
{
itemDetails = itemsWS.getItemInfo(item);
....
myButtons.Click += delegate
{
...
itemDetail = itemsWS.getItemInfo(item);
...
}
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.