代码之家  ›  专栏  ›  技术社区  ›  Nanu

当连续两次弹出MessageBox时,Windows窗体失去焦点

  •  0
  • Nanu  · 技术社区  · 7 年前
    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);
        }
    }
    

    问题

    期望 焦点被发送到第二个弹出消息框,该消息框排队等待下一个执行。这样我就不必手动点击第二个弹出框来激活它来关闭它。在第二个弹出框关闭后,焦点返回到主窗体。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Nanu    7 年前

    解决方案: 'MessageBoxOptions.ServiceNotification' 参数工作。

    备选方案1:

    如果我们希望明确指定消息框应始终位于最前面和最顶部的窗口中,我们可以指定参数((0x40000),该参数是MB\U最顶部选项的标志。

    MessageBox.Show('test_a', MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, (MessageBoxOptions)0x40000); //Message Box Top Most (MB_TOPMOST) = 0x40000
    

    另一种明确指定消息框应始终位于最前面和最上面的窗口的方法是,我们可以创建一个新的表单对象,并将最上面的布尔选项设置为True。

    MessageBox.Show(new Form() { TopMost = true }, 'test_b', MessageBoxButtons.OK, MessageBoxDefaultButton.Button1);