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#消息框最小化问题的主要内容,如果未能解决你的问题,请参考以下文章