C# 当连续触发两个MessageBox弹出窗口时,Windows窗体失去焦点
问题是,在第一个消息框弹出框关闭后,焦点会丢失到windows上的其他应用程序,如outlook 期望将焦点发送到第二个弹出消息框,该消息框排队等待下一个执行。这样我就不必手动点击第二个弹出框来激活它来关闭它。第二个弹出框关闭后,焦点返回主窗体。解决方案: 删除C# 当连续触发两个MessageBox弹出窗口时,Windows窗体失去焦点,c#,forms,winforms,messagebox,C#,Forms,Winforms,Messagebox,问题是,在第一个消息框弹出框关闭后,焦点会丢失到windows上的其他应用程序,如outlook 期望将焦点发送到第二个弹出消息框,该消息框排队等待下一个执行。这样我就不必手动点击第二个弹出框来激活它来关闭它。第二个弹出框关闭后,焦点返回主窗体。解决方案: 删除'MessageBoxOptions.ServiceNotification'参数有效 备选解决方案1: 如果我们希望明确指定消息框应始终位于最前面和最上面的窗口中,我们可以指定参数((0x40000),它是MB_TOPMOST选项的标志
'MessageBoxOptions.ServiceNotification'
参数有效
备选解决方案1:
如果我们希望明确指定消息框应始终位于最前面和最上面的窗口中,我们可以指定参数((0x40000),它是MB_TOPMOST选项的标志
Class MainForm:Form {
Public CheckValidation()
{
var controller = new FormController();
controller.checkValidation();
}
}
class FormController {
public checkValidation ()
{
MessageBox.Show('test_a',MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
MessageBox.Show('test_b',MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
}
}
备选解决方案2:
另一种明确指定消息框应始终位于最前面和最上面的窗口的方法是,我们可以创建一个新的表单对象,并将“最上面的”布尔选项设置为“True”
MessageBox.Show('test_a', MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, (MessageBoxOptions)0x40000); //Message Box Top Most (MB_TOPMOST) = 0x40000
这不容易控制。Windows的焦点问题越来越严重。您可以通过将第一个参数设置为
This
来尝试锚定MessageBox。
MessageBox.Show(new Form() { TopMost = true }, 'test_b', MessageBoxButtons.OK, MessageBoxDefaultButton.Button1);