C# 执行消息框后关闭Windows窗体
我试图在GUI中做一个简单的测验。这不是家庭作业。顺便说一句,我已经做了一个控制台测验程序,现在希望在GUI中做它。我是一名初学者,我只是经常在网上搜索,并尝试创建此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 : " +
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();
}