关于MessageBox.Show的一个问题?困扰很久了。。。

jamex 2010-04-22 02:48:08
我发现如果C#中调用
MessageBox.Show("test");

我没有指定Owner, 系统还是会默认分配当前active的窗口(例如:Form1)作为这个MessageBox的Owner.

这样导致的后果是:如果系统对Form1执行Close()方法,那个无辜的MessageBox也会被强行关掉。

我现在需要,无论那个窗口被关闭,MessageBox窗口不要受到影响,不要自动关掉。



我所想到的是一个方法是-不要让MessageBox归任何窗口的所有,但我不知道程序怎么写?


或则,大家有什么更好的办法吗?

我现在需要,无论那个窗口被关闭,MessageBox窗口不要受到影响,不要自动关掉。
...全文
503 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
乱世狂刀 2010-04-23
  • 打赏
  • 举报
回复
你的需求 不具有实际意义。。。。
cecilia2006 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jamex 的回复:]
引用 5 楼 cecilia2006 的回复:
MessageBox.Show("1", "1", MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification, true);


MessageBoxOptions.ServiceNotification 这个是全局……
[/Quote]
嗯 这个就是这样的 实在不行 就自己写个messagebox好了
清风六月 2010-04-22
  • 打赏
  • 举报
回复
你直接调用win32 API 里面的messageBox(.....)函数,它有一个参数是用来指明它的父窗口handle的,你将这个值设置为null,那么就可以做到你刚才说的那种效果。以前写win32 API 程序的时候 遇到过这种情况。
tyougyokuki 2010-04-22
  • 打赏
  • 举报
回复
新建一个winform程序,添加一个button,双击button添加以下代码和自定义函数

private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(ShowBox);
t.Start();
}

private void ShowBox()
{
MessageBox.Show("ShowDialog");
}
jamex 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cecilia2006 的回复:]
MessageBox.Show("1", "1", MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification, true);


MessageBoxOptions.ServiceNotification 这个是全局的
[/Quote]

谢谢!这个我试过了,可以基本符合要求的。但是,产生另外一个问题,当messagebox打开的时候,其他窗体就算执行了Close()方法,也关不掉了。一直要等到messagebox关闭后,才行。
jamex 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ybfh424 的回复:]
为什么不单独做一个弹出的窗口呢!
[/Quote]

谢谢!这个我也试过了,可以的。但是,产生另外一个问题,当messagebox打开的时候,其他窗体就算执行了Close()方法,也关不掉了。一直要等到messagebox关闭后,才行。
mngzilin 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 kxch12345 的回复:]
在单开一个线程中show,可以达到lz要求,但不知道这样有什么意义
[/Quote]
kxch12345 2010-04-22
  • 打赏
  • 举报
回复
在单开一个线程中show,可以达到lz要求,但不知道这样有什么意义
assky124 2010-04-22
  • 打赏
  • 举报
回复
不把MessageBox关闭,你怎么取得其他线程的控制权?

多线程!

感觉是逻辑问题
mngzilin 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jamex 的回复:]
谢谢!
不过我需要的是模式消息框。我试过message1.showDialog();
结果是一样的。 :(
[/Quote]

模式消息框??????做出来了告我一声吧,我也学习学习。
jamex 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 peng_kross 的回复:]
做一个新的 Form 把它弄成跟 消息框 一个样
[/Quote]

我试过,做一个新的 Form 把它弄成跟 消息框 一个样,如果是模式窗口的话, 运行的结果也是一样的。

如果我不对,你能给我一段例程看看吗?
jamex 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ybfh424 的回复:]
为什么不单独做一个弹出的窗口呢!
[/Quote]

单独做一个弹出的窗口,运行的结果也是一样的
peng_kross 2010-04-22
  • 打赏
  • 举报
回复
做一个新的 Form 把它弄成跟 消息框 一个样
cecilia2006 2010-04-22
  • 打赏
  • 举报
回复
MessageBox.Show("1", "1", MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification, true);


MessageBoxOptions.ServiceNotification 这个是全局的
YBFH424 2010-04-22
  • 打赏
  • 举报
回复
为什么不单独做一个弹出的窗口呢!
jamex 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwm402654282 的回复:]
新建一个窗体message1 然后在MessageBox.show()换成 窗体赋标题 窗体赋内容 然后 message1.show(); 这个你随便关那个都不会关闭
[/Quote]


谢谢!
不过我需要的是模式消息框。我试过message1.showDialog();
结果是一样的。 :(
threenewbee 2010-04-22
  • 打赏
  • 举报
回复
API: MessageBox(handle, prompt, title, flag)
wwm402654282 2010-04-22
  • 打赏
  • 举报
回复
新建一个窗体message1 然后在MessageBox.show()换成 窗体赋标题 窗体赋内容 然后 message1.show(); 这个你随便关那个都不会关闭

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧