我想向用户显示消息框,这样用户就不能拒绝确认消息框。在确认消息框之前,不应允许用户在屏幕上执行任何其他操作。
这是一个基于 Windows 的 c# 应用程序。
主要的是,即使我使用 Windows 消息框。有时它隐藏在某个屏幕后面。但就我而言,我希望消息框在出现时位于最上面。
我正在使用其他一些第三方应用程序,它们覆盖了我的消息框。我想克服这一点。
这该怎么做...
我想向用户显示消息框,这样用户就不能拒绝确认消息框。在确认消息框之前,不应允许用户在屏幕上执行任何其他操作。
这是一个基于 Windows 的 c# 应用程序。
主要的是,即使我使用 Windows 消息框。有时它隐藏在某个屏幕后面。但就我而言,我希望消息框在出现时位于最上面。
我正在使用其他一些第三方应用程序,它们覆盖了我的消息框。我想克服这一点。
这该怎么做...
看看这篇文章
MessageBox.Show Windows 窗体 C# 中的示例
编辑:
您还可以使用窗体的 topmost 属性使其位于给定应用程序中所有窗口的顶部。
要将表单显示为模式对话框,请调用ShowDialog方法。
Form frmAbout = new Form();
frmAbout.ShowDialog();
您将必须创建自己的表单,使其成为模态,更改 z 顺序以使其始终位于顶部,并捕获所有击键和鼠标点击。
始终处于领先地位:http: //www.codeguru.com/cpp/wd/dislog/article.php/c1857
如果标准实现MessageBox
不能满足您的需求,您将不得不创建自己的表单和使用ShowDialog()
方法。
听起来消息框正在另一个线程上显示。您需要确保在主 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 的模态。这是一个更复杂的场景。