`
ihuashao
  • 浏览: 4544412 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics