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

在开发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日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值