在开发PLC-Recorder软件时,自己用窗体做了大量对话框,并将对话框窗体里的某个按钮设置为“CancelButton”,也就是说在按“ESC”键时能够执行该按钮里的程序,并关闭窗体。正常配置如下:
1、配置情况:
form1里的按钮代码(用对话框打开):
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
}
form2里的按钮代码(如果选择退出,则关闭对话框,否则不关闭):
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("in button");
if (cbleave.Checked)
{
Close();
}
else
{
int i = 0;
}
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
MessageBox.Show("in closing");
}
2、遇到的问题:退出选择无效。
不管是否选择退出,按退出按钮后,都会退出。将form2的“CancelButton”设置为无时,按ESC不会退出对话框,但是,按按钮后,还是会顽强退出。
3、解决办法:
新增一个按钮与form2里这个按钮进行对比,发现是这个按钮的“DialogResult”被设置成了“Cancel”,设置成“无”后,解决了这个问题。
4、对话框窗体的特殊机制:
当窗体被作为对话框启动后,有一些特殊的响应机制,会依据设置对于ESC、回车等进行响应。
某按钮被选择为响应按钮后,就会自动修改其“DialogResult”选项。当按了ESC键后,首先执行按钮里的程序,然后再执行窗体退出指令。因此,按钮里的程序无法阻止退出。
如果按钮没有被选择为响应按钮,但是设置了“DialogResult”选项,在执行按钮里的程序后,还是会自动执行退出指令。
只有按钮没有被选择为响应按钮,且将“DialogResult”设置为“无”时,才会根据选项进行退出。
2020年12月1日