winform  打开新窗口 父窗口不在执行代码,但是不是用showdialog 
比如:
A,B,C,D,E是同一级别窗口 是以选项卡样子并排的菜单窗口。
现在打开A窗口,弹出a窗口.效果是让A窗口的代码不往下执行。等到a窗口关闭再执行。
但是在操作a的时候  同时要操作B查询窗口。
目的就是让A窗口代码停止执行。但是可以操作(当然不会操作主要是别的窗口)。
分数可加。

解决方案 »

  1.   

    弹出a窗口的时候,同时设置A.Enabled = false.
      

  2.   

    a窗口关闭的时候,再A.Enabled = true.
      

  3.   

    真是混乱的脑袋啊。你搞清楚A、a、C的关系了么?搞清楚对象之间的生命期关系了的话,那么什么叫做“让A代码不再执行,a关闭之后继续执行”?那本来就是两段代码,怎么成了一段代码?滥用“代码”概念是自找苦吃的。忘掉什么编程代码,说清楚大白话、业务流程吧。a打开前干什么事情,a关闭之后干什么事情,两个事情之间在数据上有什么联系,A怎么知道a,a有怎么知道C,这些是业务,不是什么“代码”。
      

  4.   

    本来不想花时间研究这样的实现方式的,不过看在被人误解被人喷的份上,就献上一段可行的代码吧。
             public Form1()
            {
                InitializeComponent();
                this.MouseCaptureChanged += new EventHandler(testForm_MouseCaptureChanged);
                //以下代码用于打开新窗口,可写在按钮中,这里简单处理下,就写在初始化中了。
                Form2 f = new Form2();
                f.Owner = this;
                f.Shown += new EventHandler(f_Shown);
                f.FormClosed += new FormClosedEventHandler(f_FormClosed);
                f.Show();            
            }        void f_Shown(object sender, EventArgs e)
            {
                this.Enabled = false;
                ((Form)sender).Focus();
            }        void f_FormClosed(object sender, FormClosedEventArgs e)
            {
                this.Enabled = true;
            }        void testForm_MouseCaptureChanged(object sender, EventArgs e)
            {
                if (this.OwnedForms.Length > 0)
                {
                    this.OwnedForms[0].Focus();
                }
            }