1

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

我有一些 .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 文件时被最小化。

4

2 回答 2

2

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

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

于 2011-09-03T13:06:54.467 回答
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()为您所做的设置、生命周期和拆卸的好处。

于 2011-09-03T13:08:44.610 回答