Messagebox的Owner,显示位置,自动关闭的研究。

大家都知道Messagebox用来弹出提示信息。

 

下面是我发现的一些事实:

1。如果Messagebox有owner Form的话,owner Form一关闭,Messagebox会马上自动关闭。

2。在显示Messagebox时,如何没有指定owner Form,系统会自动把同一程序中当前活动的窗体作为Messagebox的owner

3。Messagebox总是显示在owner Form所在的同一屏幕上。(如果你同时有2块以上的屏幕的话)

4。如果你不想MessageBox被自动关闭,你必须使它没有owner Form。

5。如果你一定要显示一个独立的Messagebox(无Owner), 可以用下面方法

 

MessageBox.Show("1", "1", MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification, true);

 

这种方式,有2个缺点: 当messagebox打开的时候,其他窗体就算执行了Close()方法,也关不掉了。一直要等到messagebox关闭后,其他窗体才能得以关闭。而且,messagebox始终会显示在第一块(Primary)屏幕上。(如果你同时有2块以上的屏幕的话)

 

或者使用API:

 

 MessageBox(IntPtr.Zero, "MyText", "MyCaption",
                MessageBoxOptions.IconWarning | MessageBoxOptions.YesNoCancel | MessageBoxOptions.Help | MessageBoxOptions.TaskModal | MessageBoxOptions.Topmost); 

 

这种方式,是我目前发现最好的。它同时满足了下面条件:

1。模式窗口,如果MessageBox不关闭,其他窗体不会得到响应。

2。始终显示在屏幕顶层

3。总是显示在同一程序中当前活动的窗体所在的同一屏幕上。(如果你同时有2块以上的屏幕的话)

4。当messagebox打开的时候,其他窗体执行了Close()方法,可以自由关闭

5。其他窗体执行了Close()方法关闭自身时,MessageBox不会被自动关闭,因为它没有owner form.

 

 

 

你可能感兴趣的:(.Net,C#)