您好我有以下代码,我在其中调用名为 ControlAdd 的函数,但编译器调试代码直到此函数,但不此函数。这是代码:
void SettingControls()
{
for (int i = 0; i < listBox1.Items.Count; i++)
{
string[] ListText;
ListText = listBox1.Items[i].ToString().Split('.');
if (ListText[0] == ";Control")
{
if (ListText[1] == "Form")
{
this.Text = OrganizeData(listBox1.Items[i + 2].ToString().Trim());
this.Width = Convert.ToInt16(OrganizeData(listBox1.Items[i + 3].ToString()));
this.Height = Convert.ToInt16(OrganizeData(listBox1.Items[i + 4].ToString()));
this.Left = Convert.ToInt16(OrganizeData(listBox1.Items[i + 5].ToString()));
this.Top = Convert.ToInt16(OrganizeData(listBox1.Items[i + 6].ToString()));
}
else
{
string Control_Text;
string Control_Name;
int Control_Width, Control_Height, Control_Left, Control_Top;
Control_Name = OrganizeData(listBox1.Items[i + 2].ToString().Trim());
Control_Text = OrganizeData(listBox1.Items[i + 3].ToString().Trim());
Control_Width = Convert.ToInt16(OrganizeData(listBox1.Items[i + 4].ToString()));
Control_Height = Convert.ToInt16(OrganizeData(listBox1.Items[i + 5].ToString()));
Control_Left = Convert.ToInt16(OrganizeData(listBox1.Items[i + 6].ToString()));
Control_Top = Convert.ToInt16(OrganizeData(listBox1.Items[i + 7].ToString()));
ControlAdd(ListText[1].ToString(), Control_Name, Control_Text, Control_Width, Control_Height, Control_Left, Control_Top);
}
}
}
}
编译器未调用的函数是:
ControlAdd(ListText[1].ToString(), Control_Name, Control_Text, Control_Width, Control_Height, Control_Left, Control_Top);
编译器调试代码直到这一行:
Control_Top = Convert.ToInt16(OrganizeData(listBox1.Items[i + 7].ToString()));
它只是跳过了这条线。我使用了断点但是程序会停止。编译器会跳过该行,但不会发生异常。 这个程序工作正常,直到我向函数控件add添加一个新参数ControlName。添加参数后,会出现此问题。我也尝试删除我添加的参数,但问题仍然存在。
答案 0 :(得分:3)
你正在循环:
for (int i = 0; i < listBox1.Items.Count; i++)
你正在访问数组的这个元素:
listBox1.Items[i + 7]
很有可能这超出了数组的末尾,从而引发异常。
您需要更改循环的结束条件,以便i+7
是有效的数组索引。
答案 1 :(得分:0)
也许项目调试器的输出文件夹正在寻找程序集与调试程序集不同。
当执行程序集(在调试模式下)与最新的输出程序集不同时,会出现此问题。您可以尝试在代码中放置断点,并查看断点是否有效并可在调试模式下访问。
答案 2 :(得分:0)
我相信你的问题源于你在listBox1
重用项目的事实。第一次循环时,您正在查看listBox1.Items[0]
到listBox1.Items[6]
或listBox1.Items[7]
,但在第二个循环中,您正在查看listBox1.Items[1]
到listBox1.Items[7]
或listBox1.Items[8]
。我想你想要更像这样的东西:
void SettingControls()
{
for (int i = 0; i < listBox1.Items.Count; i++)
{
string[] ListText;
ListText = listBox1.Items[i].ToString().Split('.');
if (ListText[0] == ";Control")
{
if (ListText[1] == "Form")
{
...
i+=6;
}
else
{
...
i+=7;
}
}
}
}