C#消息框最小化问题
问题描述:
我现在面临一个小问题,我的消息框。如果我直接运行程序(如双击它并从那里使用),它们工作正常。C#消息框最小化问题
我有一些.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文件时邮件框只能最小化。
答
我很严重怀疑他们实际上是最小化。更有可能的是,它们隐藏在另一个应用程序的窗口后面。是的,在这种情况下很可能是因为您没有立即创建窗口。您可能会在传递的文件上关闭一段时间,然后尝试告诉用户您已完成。为了避免“在用户面前抛出一个窗口”综合症,Windows还有一个非常严格的规则,以至仍然能够获得重点。不仅烦人,还可能失败,因为用户可能会在鼠标或键盘输入时意外关闭窗口,甚至没有注意到有窗口。如果你意外启动了Windows Update安装,那么你知道我的意思(现在已修复)。
不要使用一个消息框。要么创建一个进度表,以便您可以获得焦点并显示进度或使用NotifyIcon。
答
一种更好的方法可以是增加一个新的构造,以您的形式接受一个参数或代表在命令行传递的值参数,如下所示: -
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var parsedArgs = Parse(args);
Application.Run(new Form1(parsedArgs));
}
出于示例的目的,Parse()
是一个静态方法,它给出命令行参数,返回某种适当的类型。如果没有提供命令行参数,则返回类型可以为null,也可以为非null,其属性的默认值为空。
使用此方法,您的表单可以根据构造函数中传递的参数决定如何适当地采取行动,您仍然可以获得Application.Run()
为您所做的设置,生命期和拆卸的好处。
你能为你的'MyForm.RunMsg'的代码? – VMAtm