C#消息框最小化问题

C#消息框最小化问题,c#,message,minimized,C#,Message,Minimized,我的消息框遇到了一个小问题。如果我直接运行程序(如中所示,双击它并从那里使用它),它们工作正常 我有一些.ext文件,而不是双击时,在程序中运行(它们与我的程序关联)。现在,当消息框在那里运行时,它们会显示出来,但是它们被最小化了,我必须在任务栏上手动单击它们才能看到它们 有人知道这是为什么吗?我的程序中运行了以下代码。cs: static void Main(string[] args) { Application.EnableVisualStyles(); Applicati

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

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

有人知道这是为什么吗?我的程序中运行了以下代码。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。

我非常严重地怀疑它们是否被最小化。更有可能的是,它们隐藏在另一个应用程序的窗口后面。是的,在这种情况下很可能是这样,因为您没有立即创建窗口。您可能会在传递的文件上运行一段时间,然后尝试告诉用户您已经完成了。现在还不能获得焦点已经太迟了,Windows对此有非常严格的规定,以避免“将窗口扔到用户脸上”综合症。不仅令人恼火,它还可能失败,因为用户可能会在鼠标或键盘输入时意外关闭窗口,甚至没有注意到有一个窗口。如果您曾经意外启动Windows Update安装,那么您知道我的意思(现已修复)


不要使用消息框。创建一个进度表单,以便获得焦点并显示进度,或者使用Notify图标。

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

static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    var parsedArgs = Parse(args);
    Application.Run(new Form1(parsedArgs));
}
在本例中,
Parse()
是一个静态方法,给定命令行参数,它返回某种适当的类型。如果没有提供任何命令行参数,则返回类型可以为null,也可以为非null,并带有其属性的默认值


使用此方法,您的表单可以根据构造函数中传递的参数来决定如何适当地执行操作,并且您仍然可以从安装、生存期和拆卸中获益,
Application.Run()
适合您。

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

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
提供代码吗?您能为您的
MyForm.RunMsg
提供代码吗?