听起来应该很奇怪,但这只是我的爱好。我想要一个(自定义)消息框弹出一个 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的行为。