强制 MessageBox.Show 显示在顶部

Force MessageBox.Show to display on top

我有一个简单的 winforms 应用程序,它会通知我何时向我的工单添加注释。我面临的问题是,当应用程序最小化时,消息框不会显示在所有其他 windows 和我打开的程序之前。

我的代码是:

   private void button1_Click(object sender, EventArgs e) {
     DialogResult result1 = MessageBox.Show("Add some notes to your current ticket?",
      "Add Notes",
      MessageBoxButtons.YesNo);


     if (result1 == DialogResult.Yes) {
      Timer tm;
      tm = new Timer();

      tm.Interval = int.Parse(textBox2.Text);
      tm.Tick += new EventHandler(button1_Click);

      string pastebuffer = DateTime.Now.ToString();
      pastebuffer = "### Edited on " + pastebuffer + " by " + txtUsername.Text + " ###";
      Clipboard.SetText(pastebuffer);

      tm.Start();
     } else if (result1 == DialogResult.No) {
      //do something else
     }

我的理解是我需要添加TopMost = True。但是我看不到在我的代码中添加它的位置?

当您显示 MessageBox 时,将主表单上的 TopMost 属性 设置为 trueMessageBox 将模态到最顶层的主要形式,使 MessageBox 最顶层 .

显示 MessageBox 后,您可以轻松地将 TopMost 属性 再次设置为 false。

private void button1_Click(object sender, EventArgs e)
{
    this.TopMost = true; // Here.

    DialogResult result1 = MessageBox.Show("Add some notes to your current ticket?",
    "Add Notes",
    MessageBoxButtons.YesNo);

    this.TopMost = false; // And over here.

    if (result1 == DialogResult.Yes) {
        Timer tm;
        tm = new Timer();

        tm.Interval = int.Parse(textBox2.Text);
        tm.Tick += new EventHandler(button1_Click);

        string pastebuffer = DateTime.Now.ToString();
        pastebuffer = "### Edited on " + pastebuffer + " by " + txtUsername.Text + " ###";
        Clipboard.SetText(pastebuffer);

        tm.Start();
    }
    else if (result1 == DialogResult.No)
    {
        // Do something else.
    }
}

试试这个 MessageBoxOptions.ServiceNotification :

DialogResult res = MessageBox.Show(some text, "ATENCIÓN",   MessageBoxButtons.OKCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1, 
MessageBoxOptions.ServiceNotification);