【问题标题】:MessageBox in c#C#中的消息框
【发布时间】:2009-09-08 04:23:42
【问题描述】:

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

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

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

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

如何做到这一点...

【问题讨论】:

  • 这种类型的消息框称为“系统模式”,对此的支持非常少,因为没有人喜欢禁用系统其余部分的应用程序。为什么你的应用会被允许这样做?

标签: c# messagebox


【解决方案1】:

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

永远在最前面:http://www.codeguru.com/cpp/w-d/dislog/article.php/c1857

【讨论】:

    【解决方案2】:

    看看这篇文章

    MessageBox.Show Examples in Windows Forms C#

    编辑:

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

    How to: Keep a Windows Form on Top

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 最主要的是,即使我使用 Windows 消息框。有时它隐藏在某个屏幕后面。但就我而言,我希望消息框在出现时位于最上面。
      • 我正在使用其他一些第三方应用程序,它覆盖了我的消息框。我想克服这个。
      【解决方案4】:

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

      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 的模态。这是一个更复杂的场景。

      【讨论】:

        猜你喜欢
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-29
        • 2016-06-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多