5

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

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

主要的是,即使我使用 Windows 消息框。有时它隐藏在某个屏幕后面。但就我而言,我希望消息框在出现时位于最上面。

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

这该怎么做...

4

4 回答 4

4

看看这篇文章

MessageBox.Show Windows 窗体 C# 中的示例

编辑:

您还可以使用窗体的 topmost 属性使其位于给定应用程序中所有窗口的顶部。

如何:将 Windows 窗体置于顶部

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

Form frmAbout = new Form();
frmAbout.ShowDialog();
于 2009-09-08T04:27:13.620 回答
4

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

始终处于领先地位:http: //www.codeguru.com/cpp/wd/dislog/article.php/c1857

于 2009-09-08T04:29:46.720 回答
2

如果标准实现MessageBox不能满足您的需求,您将不得不创建自己的表单和使用ShowDialog()方法。

于 2009-09-08T04:25:23.680 回答
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 的模态。这是一个更复杂的场景。

于 2009-09-08T05:51:45.067 回答