我的消息框面临一个小问题。如果我直接运行程序(如,双击并从那里使用它),它们工作正常。
我有一些.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文件时才会最小化消息框。
答案 0 :(得分:2)
我非常怀疑他们实际上是最小化的。更有可能的是,它们隐藏在另一个应用程序的窗口后面。是的,这种情况很可能是因为您没有立即创建窗口。您可能会暂时关注传递的文件,然后尝试告诉用户您已完成。为了能够获得焦点太晚,Windows对此有非常严格的规定,以避免“在用户脸上抛出一个窗口”综合症。不仅烦人,它也可能失败,因为用户可能会在鼠标或键盘输入时意外关闭窗口,甚至没有注意到有窗口。如果您不小心启动了Windows Update安装,那么您就知道我的意思(现已修复)。
请勿使用消息框。创建一个进度表单,以便您可以获得焦点并显示进度或使用NotifyIcon。
答案 1 :(得分: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()
为您设置的设置,生命周期和拆解的好处。