C# 执行消息框后关闭Windows窗体

C# 执行消息框后关闭Windows窗体,c#,.net,winforms,C#,.net,Winforms,我试图在GUI中做一个简单的测验。这不是家庭作业。顺便说一句,我已经做了一个控制台测验程序,现在希望在GUI中做它。我是一名初学者,我只是经常在网上搜索,并尝试创建此Windows窗体: private void Form1_Load(object sender, EventArgs e) { if (count == 2) { MessageBox.Show("Congrats You Score is : " +

我试图在GUI中做一个简单的测验。这不是家庭作业。顺便说一句,我已经做了一个控制台测验程序,现在希望在GUI中做它。我是一名初学者,我只是经常在网上搜索,并尝试创建此Windows窗体:

private void Form1_Load(object sender, EventArgs e)
   {
         if (count == 2)
            {
                MessageBox.Show("Congrats You Score is : " + Marks, "Result", MessageBoxButtons.OK);
                SendKeys.Send("%{F4}");//tried Application.Exit() this.Close();

            }
            string choice = src.ReadLine();
            string ques = srq.ReadLine();
            opt = choice.Split('\t'); 
            label1.Font = new Font("Times New Roman", 15);
            label1.Text = ques;
            ch1.Font = new Font("Times New Roman", 15);
            ch1.Text = opt[0];
            ch2.Font = new Font("Times New Roman", 15);
            ch2.Text = opt[1];
            ch3.Font = new Font("Times New Roman", 15);
            ch3.Text = opt[2];
            ch4.Font = new Font("Times New Roman", 15);
            ch4.Text = opt[3];            
         }
在按下“下一步”按钮后,上述方法将继续加载新问题及其选项

现在我想让测验在计数达到2或更多后自动退出。我尝试了
this.Close()
SendKey,Environment.Exit(0,inputsimulator
(是的,我确实下载了
.dll
文件并添加了它的引用,使用了名称空间)也不起作用

此外,inputsimulator的缺点是,它只在选择应用程序时工作。。。
sendkeys
无论应用程序是否被选中,都能正常工作,所以这不是更好吗

我知道,要使
this.close()
正常工作,需要鼠标单击之类的事件,但我希望测验显示分数,并在回答所有问题后自行关闭

目前,测验未结束,并引发异常,因为读取问题和选项的文件没有任何剩余内容

我访问了以下链接

我认为您应该将额外的代码包装在else语句中。这将阻止您不希望执行的内容执行

“this.Close();”应该可以工作。如果这是应用程序的主窗口,并且您想关闭应用程序,那么您应该使用“Application.Exit();”

至于数组部分,我实际上会这样做

    if (count == 2)
        {
            MessageBox.Show("Congrats You Score is : " + Marks, "Result", MessageBoxButtons.OK);
            this.Close();

        }
    else
        {
           string choice = src.ReadLine();
           string ques = srq.ReadLine();
           opt = choice.Split('\t'); 
           label1.Font = new Font("Times New Roman", 15);
           label1.Text = ques;
           ch1.Font = new Font("Times New Roman", 15);
           ch1.Text = opt[0];
           ch2.Font = new Font("Times New Roman", 15);
           ch2.Text = opt[1];
           ch3.Font = new Font("Times New Roman", 15);
           ch3.Text = opt[2];
           ch4.Font = new Font("Times New Roman", 15);
           ch4.Text = opt[3];  
        }

首先检查count variable的值,我认为count variable持有的值与2不同,这就是应用程序不关闭的原因,因为只有当count variable的值等于2时,您才命令关闭应用程序

为确保count变量出现问题,请在检查count变量值是否等于2之前,尝试将count变量值设置为2。否则,您可以使用调试模式对此进行调试

       using System.Collections.Generic;

您是否尝试对程序进行解块,它在哪里出错,异常是什么?如果这是您唯一的表单,则
Form.Close()
)和
Application.Exit()
都应该执行此操作。您是否也有表单关闭事件?您好,错误显示在第一个方法中,它突出显示字符串temp=choice.split('\t'));该异常是在FirstGUI中发生的“System.NullReferenceException”类型的首次意外异常。exe@Shaharyar关闭按钮工作正常。异常发生在消息框显示标记后。可能发生的另一个问题可能会被计数,因为此值用作包含答案键但不包含V的数组的索引S2012 Higlights唯一选项。代码中拆分部分;Hi感谢else,它解决了即将出现的异常(底部代码未执行)我不明白你说的FormLoaded是什么意思,我只是第一次尝试GUI,如果它很简单,那么很抱歉,事实上我可以更正它。我查找它是为了给你一个链接,但是windows窗体没有加载事件。我的错。我很高兴其他人为你工作。我在过去遇到过这个错误。这与窗体被删除有关osed,窗体上的控件被取消引用,因为窗体已不存在,但代码仍将尝试运行,因为它不在else中。else已解决异常,但现在的问题是代码停留在最后一个问题上,该问题已得到回答。如果我在choice中添加try-catch块,则不会再出现异常。拆分('\t'))抛出的异常已被捕获,但现在由于计数值超过数组索引,检查方法会生成超出范围的数组索引。谢谢您的帮助…您能给出一个“src”对象中存储内容的示例吗?@devnw非常感谢“else”提示刚刚尝试了SendKeys.Send(“%{F4}”);再次,它像一个符咒一样工作..我认为错误是以前造成的,因为可能是一个线程在窗体关闭之前开始执行else部分,或者可能在显示消息框时已经开始处理else部分..我假设控件将一个接一个地流动..这是在if块仅执行之后,然后将下面的代码执行猜测不是这样的@Dooby Inc感谢计数值很好,现在测验工作正常,添加了计时器功能,可以倒计时并在30秒后关闭测验感谢您对回答我的问题感兴趣
       List<string> opt = choice.Split('\t').ToList<string>(); 
       label1.Font = new Font("Times New Roman", 15);
       label1.Text = ques;

       if(opt.Count >= 1)
       {
          ch1.Font = new Font("Times New Roman", 15);
          ch1.Text = opt[0];
       }

       if(opt.Count >= 2)
       {
          ch2.Font = new Font("Times New Roman", 15);
          ch2.Text = opt[1];
       }

       if(opt.Count >= 3)
       {
          ch3.Font = new Font("Times New Roman", 15);
          ch3.Text = opt[2];
       }

       if(opt.Count >= 4)
       {
          ch4.Font = new Font("Times New Roman", 15);
          ch4.Text = opt[3];
       }
       using System.Collections.Generic;
  count= 2 ; // Set count to two , it doesn't matter where you set it to two , however it has to be set to two before you call this code if you really need to exit the program when you call this code.
     if (count == 2)
        {
            MessageBox.Show("Congrats You Score is : " + Marks, "Result", MessageBoxButtons.OK);
            SendKeys.Send("%{F4}");//tried Application.Exit() this.Close();

        }