加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何创建非模态表单但阻止?

发布时间:2020-12-16 01:50:02 所属栏目:百科 来源:网络整理
导读:听起来应该很奇怪,但这只是为了我的爱好.我想要一个(自定义)消息框弹出YesNo按钮,理想情况下应该阻止代码.但我应该能够点击父表单,这样我就可以关闭消息框而无需专门点击消息框按钮(相当于在消息框中单击否). 这样的事情: void Foo() { CustomMsgBox.Show("
听起来应该很奇怪,但这只是为了我的爱好.我想要一个(自定义)消息框弹出YesNo按钮,理想情况下应该阻止代码.但我应该能够点击父表单,这样我就可以关闭消息框而无需专门点击消息框按钮(相当于在消息框中单击否).

这样的事情:

void Foo()
     {
         CustomMsgBox.Show("do you really wanna delete?",CustomMsgBox.Buttons.YesNo);
         //block the code here,but user should be able to click on form,so that its equivalent to have clicked No;
         //if clicked No,return;

         //delete.
     }

所以我认为解决方案是使自定义消息框非模态 – 以便用户可以单击表单,但我无法阻止代码..我怎么能这样做?

它看起来像这样:

void Foo()
 {
     NonModalMsgBox.Show("do you really wanna delete?",CustomMsgBox.Buttons.YesNo);
     //block thread till user clicks on form or messagebox buttons.
     //unblock when user clicks.
     //if No,return;

     //delete.
 }

编辑:我知道这不是一个标准练习,我知道非模态形式不会阻止,而模态形式可以.所以请不要建议对模态形式或非模态形式的行为感到满意.我的问题是有没有办法用Windows窗体模拟ContextMenu的行为.

解决方法

你可以这样做:

public void ShowMe() {
    Show();
    while (!_receivedDeactivateEvent)
        Application.DoEvents();
}

我不确定我是否会推荐它 – 我不确定它会有多稳定,也不确定如果单击父窗体上的“删除”按钮,它是否会按照您想要的方式运行对话框’已启动(它会先关闭第一个对话框,还是将其保留?可能是后者,这可能会变得混乱).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读