C# 函数不调用

C# 函数不调用,c#,C#,您好,我有下面的代码,在其中我调用了一个名为ControlAdd的函数,但是编译器调试代码直到这个函数,而不是这个函数。代码如下: void SettingControls() { for (int i = 0; i < listBox1.Items.Count; i++) { string[] ListText; ListText = listBox1.Items[i].ToString().

您好,我有下面的代码,在其中我调用了一个名为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);
                }
            }
        }
    }
编译器调试代码直到这一行:

Control_Top = Convert.ToInt16(OrganizeData(listBox1.Items[i + 7].ToString()));
它只是越界了。我使用了断点,但程序没有停止。编译器跳过该行,但未发生异常。 在我将一个新的参数ControlName添加到函数control add之前,这个程序一直运行良好。添加参数后,出现此问题。我还尝试删除添加的参数,但问题仍然存在。

您正在循环:

for (int i = 0; i < listBox1.Items.Count; i++)
这很有可能超出了数组的末尾,从而引发异常

您需要更改循环的结束条件,以便
i+7
是有效的数组索引。

您正在循环:

for (int i = 0; i < listBox1.Items.Count; i++)
这很有可能超出了数组的末尾,从而引发异常


您需要更改循环的结束条件,以便
i+7
是有效的数组索引。

调试器正在查找程序集的项目输出文件夹可能与调试程序集不同


当执行的程序集(在调试模式下)与最新的输出程序集不同时,会发生此问题。您可以尝试在代码中放置断点,并查看断点是否有效以及在调试模式下是否可访问。

调试器正在查找程序集的项目的输出文件夹可能与调试程序集不同


当执行的程序集(在调试模式下)与最新的输出程序集不同时,会发生此问题。您可以尝试在代码中放置断点,并查看断点是否有效,以及在调试模式下是否可访问。

我认为您的问题源于重用
列表框1
中的项。第一次循环时,您看到的是通过
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;
            }
        }
    }
}
void SettingControls()
{
对于(int i=0;i
我相信您的问题源于重复使用
列表框1
中的项目。第一次循环时,您看到的是通过
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;
            }
        }
    }
}
void SettingControls()
{
对于(int i=0;i
我认为您正在使用try/catch错误处理。这就是为什么调试程序没有显示任何异常,因为您的catch块可能是空的。

我认为您正在使用try/catch错误处理。这就是为什么调试程序没有显示任何异常,因为您的catch块可能是空的。

之后会发生什么?你说没人叫它-发生了什么事?我的猜测是,前一行抛出了一个异常,但很难知道…当你说“调试代码直到这一行”是什么意思?执行是否在此停止并产生异常?程序只是跳过那一行吗?如果在该行上设置断点,程序将永不中断?Project+Properties,Build选项卡,将平台目标更改为x86。这避免了64位操作系统上的一个错误,在该操作系统中,表单的加载事件调用的任何代码中都不会诊断异常,然后会发生什么?你说没人叫它-发生了什么事?我的猜测是,前一行抛出了一个异常,但很难知道…当你说“调试代码直到这一行”是什么意思?执行是否在此停止并产生异常?程序只是跳过那一行吗?如果在该行上设置断点,程序将永不中断?Project+Properties,Build选项卡,将平台目标更改为x86。这可以避免在64位操作系统上出现错误,在该操作系统中,表单的加载事件调用的任何代码中都不会诊断异常。如果您在Visual Studio中运行项目(即,连接了调试器),它将重新生成自上次生成以来已更改的任何项目。我真的不认为这是个问题。我在很多情况下都有这个问题。特别是当我更改输出文件夹时。如果您更改输出文件夹,调试器也会在那里查找程序集。他可能会动态加载程序集,甚至使用“附加到进程”进行调试!或事件调试win服务如果您从Visual Studio中运行项目(即,连接了调试器),它将重建自上次生成以来已更改的任何项目。我真的不认为这是个问题。我在很多情况下都有这个问题。特别是当我更改输出文件夹时。如果您更改输出文件夹,调试器也会在那里查找程序集。他可能会动态加载程序集