C#消息框最小化问题

Posted

技术标签:

【中文标题】C#消息框最小化问题【英文标题】:C# message box minimized problem 【发布时间】:2011-11-09 17:25:09 【问题描述】:

我的消息框遇到了一个小问题。如果我直接运行该程序(例如,双击它并从那里使用它),它们就可以正常工作。

我有一些 .ext 文件,而不是双击时运行程序(它们与我的程序相关联)。现在,当消息框在此处运行时,它们会显示出来,但它们已被最小化,我必须在任务栏上手动单击它们才能看到它们。

有人知道这是为什么吗?我的 Program.cs 中运行着这段代码:

static void Main(string[] args)

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    var MyForm = new Form1();
    if (args.Length != 0)
    
        MyForm.RunMsg(); // this is a function I am calling
        Application.Exit();
    
    else
        Application.Run(MyForm);

任何帮助将不胜感激。是的,我可以确认消息框仅在运行 .ext 文件时被最小化。

【问题讨论】:

你能提供你的MyForm.RunMsg的代码吗? 【参考方案1】:

我非常怀疑它们实际上是否被最小化。更有可能的是它们隐藏在另一个应用程序的窗口后面。是的,在这种情况下很可能是因为您没有立即创建窗口。您可能会在传递的文件上紧缩一段时间,然后尝试告诉用户您已完成。为时已晚,仍然无法获得焦点,Windows 对此有非常严格的规定,以避免“向用户扔窗口”综合症。不仅烦人,它还可能会失败,因为用户可能在鼠标或键盘输入时不小心关闭了窗口,甚至没有注意到有一个窗口。如果您不小心启动了 Windows 更新安装,那么您就会明白我的意思(现已修复)。

不要使用消息框。要么创建一个进度表单,以便您可以获取焦点并显示进度,要么使用 NotifyIcon。

【讨论】:

【参考方案2】:

更好的方法可能是向您的表单添加一个新的构造函数,该构造函数接受一个或多个表示命令行中传递的值的参数,如下所示:-

static void Main(string[] args)

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    var parsedArgs = Parse(args);
    Application.Run(new Form1(parsedArgs));

出于示例的目的,Parse() 是一个静态方法,给定命令行参数,返回某种适当的类型。如果没有提供命令行参数,则返回类型可以为 null,也可以为非 null,并为其属性提供默认值。

使用此方法,您的表单可以根据构造函数中传递的参数决定如何适当地采取行动,并且您仍然可以享受Application.Run() 为您所做的设置、生命周期和拆卸的好处。

【讨论】:

以上是关于C#消息框最小化问题的主要内容,如果未能解决你的问题,请参考以下文章

窗口消息框中的 C# WPF XAML

如何在C#中显示没有任何按钮的消息框

C#:在自定义消息框中显示进度条变化

WinForm | C# 弹出简易的消息提示框 (仿Android Toast消息提示)

c# 消息框代理

C# Web 浏览器消息框 - 复制警报文本