我发现如果C#中调用
MessageBox.Show("test");我没有指定Owner, 系统还是会默认分配当前active的窗口(例如:Form1)作为这个MessageBox的Owner.这样导致的后果是:如果系统对Form1执行Close()方法,那个无辜的MessageBox也会被强行关掉。我现在需要,无论那个窗口被关闭,MessageBox窗口不要受到影响,不要自动关掉。我所想到的是一个方法是-不要让MessageBox归任何窗口的所有,但我不知道程序怎么写?
或则,大家有什么更好的办法吗?我现在需要,无论那个窗口被关闭,MessageBox窗口不要受到影响,不要自动关掉。

解决方案 »

  1.   

    新建一个窗体message1 然后在MessageBox.show()换成 窗体赋标题 窗体赋内容 然后 message1.show(); 这个你随便关那个都不会关闭
      

  2.   

    API: MessageBox(handle, prompt, title, flag)
      

  3.   

    谢谢!
    不过我需要的是模式消息框。我试过message1.showDialog();
    结果是一样的。 :(
      

  4.   

      MessageBox.Show("1", "1", MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification, true);
    MessageBoxOptions.ServiceNotification 这个是全局的
      

  5.   

    做一个新的 Form  把它弄成跟 消息框 一个样
      

  6.   


    我试过,做一个新的 Form 把它弄成跟 消息框 一个样,如果是模式窗口的话, 运行的结果也是一样的。如果我不对,你能给我一段例程看看吗?
      

  7.   

    不把MessageBox关闭,你怎么取得其他线程的控制权?多线程!感觉是逻辑问题
      

  8.   

    在单开一个线程中show,可以达到lz要求,但不知道这样有什么意义
      

  9.   


    谢谢!这个我也试过了,可以的。但是,产生另外一个问题,当messagebox打开的时候,其他窗体就算执行了Close()方法,也关不掉了。一直要等到messagebox关闭后,才行。
      

  10.   


    谢谢!这个我试过了,可以基本符合要求的。但是,产生另外一个问题,当messagebox打开的时候,其他窗体就算执行了Close()方法,也关不掉了。一直要等到messagebox关闭后,才行。
      

  11.   

    新建一个winform程序,添加一个button,双击button添加以下代码和自定义函数        private void button1_Click(object sender, EventArgs e)
            {
                Thread t = new Thread(ShowBox);
                t.Start();
            }        private void ShowBox()
            {
                MessageBox.Show("ShowDialog");
            }
      

  12.   

    你直接调用win32 API 里面的messageBox(.....)函数,它有一个参数是用来指明它的父窗口handle的,你将这个值设置为null,那么就可以做到你刚才说的那种效果。以前写win32 API 程序的时候 遇到过这种情况。