你好我得到了#34;索引超出了阵列的范围"如果我将值(i)放在 itemsWS.getItemInfo(itemLis [i] .ToString())
FIELDTIME
(这是数据库)
问题是如果我用[0]替换[i]。它只显示数据库中的第一个值项
(如果我用[0]替换[i],这里是GUI)点击任何按钮都会重复相同的输出
请非常感谢任何帮助。我尝试使用生成的新按钮来显示MySQL中的项目,这些按钮将显示在datagridview上。感谢
答案 0 :(得分:0)
尝试将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);
...
}
...
}