1. 现在有一个mainForm,在mainForm上点击菜单栏弹出 childMainForm, 在childMainForm上点击按钮弹出childForm
   现在问题:弹出childForm后,我无法在点击childMainForm,一定要关了childForm后才能在childMainForm上点击,这是为什么?
   我程序里弹出方式用的都类似于 
   childMainForm ch = new childMainForm();
   ch.Show();2. 窗体间传递参数是怎么处理的?
   就比如我上面childMainForm上点击一个按钮,传参数给childForm,并让childForm根据得到的参数值做一些处理再显示出来,
   我网上参考的写了一些传递参数的方法,都没实现。新手,请各位赐教

解决方案 »

  1.   

    2. childForm 中设置一个属性,接收参数就可以了, 在 new childForm 后, 将参数传给 childForm.属性 就可以。
      

  2.   

    1.用showDialog()模态对话框啊,设置好owner
    2.窗体传参数其实就等于对象之间的通信,但是模态对话框比如变量dlg返回时到作用域之前}
    这段时间,dlg变量没有销毁,所以可以使用dlg的一个公有变量,如果
    dlg.result你可以自己定义啦。
    但是用show出来的话这样不行了,应该是异步的,show后面的代码之间执行了,不会阻塞。
    可以在事件处理里去处理。
      

  3.   

    1 showDialog()替代show()2 form1:
      form2 f=new form2("xxx");
      form2:
      string str="";
      public form2(string strs)
      {
          str=strs;
      }
      

  4.   

    To问题1:childForm的显示是否用的模态显示,即showDialog()。改成show()即可。To问题2:在childForm类中创建一个Public的属性,用来操作你要传的值。点击按钮时直接给这个属性赋值即可。如果要相应这个值的变化,那就要用委托了。
      

  5.   

    childForm 是什么方式显示的?
    看你的情况应该是ShowDialog()
    你改成Show() 
    就可以点击 childMainForm了窗体间传值 可以用属性,变量
      

  6.   

    大家好
    第一个问题不对啊
    改成show()和ShowDialog()
    结果都是一样的,都不能再次点击不知道是不是我没说明白
    第2个窗体上,点击按钮弹出第3个窗体;现在我要不关闭第3个窗体直接点击第2个窗体的按钮弹出第4个窗体
      

  7.   


    第一个问题我写的很清楚,用的是show()
      

  8.   


    1里面的owner怎么设置的?
      

  9.   

    设置了owner也不行啊我在第二个窗体里
    Form3 fm3 = new Form3();
    fm3.ShowDialog(this);结果运行后,焦点始终在第3个窗体里,我单击第2个窗体的任何地方都一样,焦点始终在第3个窗体了
      

  10.   


    这个肯定不行
    人家用的本来就是是show(),问题没看明白啊你
      

  11.   

    不好意思,各位
    第一个用 show() 可以实现的。之前是我搞错了我这里追加个问题
    我Form2 弹出了 Form3
    现在我想做到,Form3既然弹出来了,那么我再点击Form2上的事件时,我想不再弹出新的Form3了,直接让Form3刷新一下,这样能做到吗?类似于web的方式如果做不到的话,能否在弹出第4个窗体的时候自动将第3个窗体关掉??
    我这里不知道怎么判断第3个窗体的名字了
      

  12.   

    childForm的代码贴出来看看,正常情况下childMainForm是可以通过点击再次激活的。
      

  13.   

        bool IsExist = false;
        foreach (Form frm in Application.OpenForms)
        {
            if (frm.Text  == "Form1")
            {
                frm.Activate();
                IsExist = true;
                return;
            }
        
        }    Form1 frm1 = new Form1();
        frm1.Show();
      

  14.   


     bool IsExist = false;
      foreach (Form frm in Application.OpenForms)
      {
      if (frm.Text == "Form1")
      {
      frm.Activate();
      IsExist = true;
      return;
      }
        
      }  Form1 frm1 = new Form1();
      frm1.Show();
      

  15.   


    private void button1_Click(object sender, EventArgs e)
    {
        bool IsExist = false;
        foreach (Form frm in Application.OpenForms)
        {
            if (frm.Text  == "Form1")//换成你的Form3        {
                frm.Activate();
                IsExist = true;
                return;
            }
        }
        Form1 frm1 = new Form1();
        frm1.Show();   
    }
      

  16.   

    form3 f3;事件里写if(f3==null)
    {
    f3.show();
    }
    else
    {
    f3.close();
    f3.show();
    }
      

  17.   


        private void button3_Click(object sender, EventArgs e)
        {
            bool IsExist = false;
            foreach (Form frm in Application.OpenForms)
            {
                if (frm.Text  == "Form1")
                {
                    frm.Activate();
                    IsExist = true;
                    return;
                }
            
            }
            if (IsExist == false)//上面这个地方忘判断了
            {
                Form1 frm1 = new Form1();
                frm1.Show();
            }            
        }
      

  18.   

    To问题1:childForm的显示是否用的模态显示,即showDialog()。改成show()即可。To问题2:在childForm类中创建一个Public的属性,用来操作你要传的值。点击按钮时直接给这个属性赋值即可。如果要相应这个值的变化,那就要用委托了。
      

  19.   

    在第二个窗体封装下一个属性咯
       
       private int id;
       get。
       set。。第一个窗口new第二个的时候
         form form2 = new form();
         form2.id  =   赋值咯、、、、、form2.show();。
       传值
      

  20.   

    so easy ,连msdn都不用看的问题唉