2011-09-03 59 views
1

我现在面临一个小问题,我的消息框。如果我直接运行程序(如双击它并从那里使用),它们工作正常。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文件时邮件框只能最小化。

+1

你能为你的'MyForm.RunMsg'的代码? – VMAtm

回答

2

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

不要使用一个消息框。要么创建一个进度表,以便您可以获得焦点并显示进度或使用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()为您所做的设置,生命期和拆卸的好处。