当我单击按钮转到 winforms 中的另一个表单时,应用程序冻结

Application freezes when I click on button to go to another form in winforms

    private void subjectpagenextbtn_Click(object sender, EventArgs e)
    {

        TextBox[] subjectnamearray = new TextBox[] { subjectname1, subjectname2, subjectname3, subjectname4, subjectname5, subjectname6 };
        int i = 0;
        while (i <= numofsubjects.SelectedIndex)
        {
            if (subjectnamearray[i].Text.Trim() == string.Empty)
            {
                MessageBox.Show("Please fill out all textboxes.", "Error Message");
                i = i + 1;
                return;
            }
        }

        i = 0;
        string[] subjects = new string[numofsubjects.SelectedIndex];
        List<string> datatablesubjectnamearray = new List<string>();

        this.Hide();
        var TaskPage = new Task_Page(subjectnamearray,datatablesubjectnamearray,numofsubjects.SelectedIndex);
        TaskPage.Closed += (s, args) => this.Close();
        TaskPage.Show();
        TaskPage.StartPosition = FormStartPosition.Manual;
        TaskPage.Location = new Point(this.Location.X, this.Location.Y);



        while (i < numofsubjects.SelectedIndex)
        {

            datatablesubjectnamearray.Add(subjectnamearray[i] + "Weighting");
            datatablesubjectnamearray.Add(subjectnamearray[i] + "Marks");
            /*http://csharp.net-informations.com/collection/list.htm*/


            i = i + 1;

        }

        Task_Page taskpage = new Task_Page(subjectnamearray, datatablesubjectnamearray, numofsubjects.SelectedIndex);

    }

这是我拥有的表单上的一个按钮的代码,它收集用户的主题和用户的主题数量,我基本上还为我正在创建的数据表的标题制作了一个数组将在下一个表单上创建。我还将 values,subjectnamearray, datatablesubjectnamearray, numofsubjects.SelectedIndex 传递给 TaskPage。因此,任务页面是我单击按钮时想要到达的页面。我也希望传递这些值,但是当我单击按钮时,它只是冻结,我什至无法关闭应用程序。我必须在 visual studio 上按下停止按钮。但是不知道为什么会冷

您的第一个 while 循环似乎是问题所在。你陷入了无限循环。我没有在代码中进一步看到任何其他问题。

您的代码如下所示:

private void subjectpagenextbtn_Click(object sender, EventArgs e)
{

    TextBox[] subjectnamearray = new TextBox[] { subjectname1, subjectname2, subjectname3, subjectname4, subjectname5, subjectname6 };
    int i = 0;
    while (i <= numofsubjects.SelectedIndex)
    {
        if (subjectnamearray[i].Text.Trim() == string.Empty)
        {
            MessageBox.Show("Please fill out all textboxes.", "Error Message");
            i = i + 1;
            return;
        }
    }

我想如果你把代码改成这样:

private void subjectpagenextbtn_Click(object sender, EventArgs e)
{

    TextBox[] subjectnamearray = new TextBox[] { subjectname1, subjectname2, subjectname3, subjectname4, subjectname5, subjectname6 };
    int i = 0;
    while (i <= numofsubjects.SelectedIndex)
    {
        if (subjectnamearray[i].Text.Trim() == string.Empty)
        {
            MessageBox.Show("Please fill out all textboxes.", "Error Message");            
            return;
        }
        i = i + 1;
    }

它应该可以解决您的 visual studio 崩溃问题。如果没有,我建议关闭 VS,重新启动计算机并重试。祝你好运!