c#中的MessageBox

时间:2009-09-08 04:23:42

标签: c# messagebox

我想向用户显示消息框,这样用户就无法拒绝确认消息框。在确认消息框之前,不应允许用户在屏幕上执行任何其他操作。

这是一个基于Windows的c#应用程序。

主要的是,即使我使用Windows消息框。有时它隐藏在一些屏幕后面。但对于我的情况,我希望消息框在出现时最重要。

我正在使用其他一些第三方应用程序,这些应用程序超过了我的消息框。我想克服这一点。

如何做到这一点......

5 个答案:

答案 0 :(得分:4)

看一下这篇文章

MessageBox.Show Examples in Windows Forms C#

编辑:

您还可以使用表单的最顶层属性将其置于给定应用程序中的所有窗口之上。

How to: Keep a Windows Form on Top

要将表单显示为模式对话框,请调用 ShowDialog 方法。

Form frmAbout = new Form();
frmAbout.ShowDialog();

答案 1 :(得分:4)

您必须创建自己的表单,使其成为模态,更改z顺序以使其始终位于顶部,并捕获所有击键和鼠标单击。

始终位于最前方:http://www.codeguru.com/cpp/w-d/dislog/article.php/c1857

答案 2 :(得分:2)

如果MessageBox的标准实施无法满足您的需求,则必须创建自己的表单并使用ShowDialog()方法。

答案 3 :(得分:1)

我认为您正在寻找系统模式对话框。

上一个主题:

How to display a message box in C# as system modal?

答案 4 :(得分:1)

听起来消息框正在另一个线程上显示。您需要确保在主UI线程上调用MessageBox.Show。下面是一个代码片段,说明了实现此目的的方法:

public class FooForm: Form
{

   //This is just a button click handler that calls ShowMessage from another thread.
   private void ButtonShowMessage_Click(object sender,EventArgs e)
   {
     //Use this to see that you can't interact with FooForm before closing the messagebox.
     ThreadPool.QueueUserWorkItem(delegate{ ShowMessage("Hello World!");});

     //Use this (uncomment) to see that you can interact with FooForm even though there is a messagebox.
     //ThreadPool.QueueUserWorkItem(delegate{ MessageBox.Show("Hello World!");});
   }

   private void ShowMessage(string message)
   {
     if( InvokeRequire)
     {
       BeginInvoke(new MethodInvoker( () => MessageBox.Show(message))); 
     }
     else
     {
       MessageBox.Show(message);
     }
   }    
} 

我假设您没有多个UI线程的场景,当其中一个弹出消息框时,您希望该消息框对整个UI都是模态的。这是一个更复杂的场景。