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(); } 我不确定我是否会推荐它 – 我不确定它会有多稳定,也不确定如果单击父窗体上的“删除”按钮,它是否会按照您想要的方式运行对话框’已启动(它会先关闭第一个对话框,还是将其保留?可能是后者,这可能会变得混乱). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |