C#对话框窗体里的特殊机制

在开发PLC-Recorder软件时,自己用窗体做了大量对话框,并将对话框窗体里的某个按钮设置为“CancelButton”,也就是说在按“ESC”键时能够执行该按钮里的程序,并关闭窗体。正常配置如下:

1、配置情况:

C#对话框窗体里的特殊机制

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、回车等进行响应。

C#对话框窗体里的特殊机制

某按钮被选择为响应按钮后,就会自动修改其“DialogResult”选项。当按了ESC键后,首先执行按钮里的程序,然后再执行窗体退出指令。因此,按钮里的程序无法阻止退出。

如果按钮没有被选择为响应按钮,但是设置了“DialogResult”选项,在执行按钮里的程序后,还是会自动执行退出指令。

只有按钮没有被选择为响应按钮,且将“DialogResult”设置为“无”时,才会根据选项进行退出。

 

2020年12月1日

上一篇:C#打开窗体获取文件夹


下一篇:ArcEngine代码 ShapeFile数据转换为File Geodatabase数据