有一个主窗体Form1,点击按钮,弹出一个窗体Form2,在Form2输入查询条件(条件有点多,所以另外开一个窗体),点击确定后Form2消失,主窗体中的treeview节点根据Form2中的条件的查询结果生成,请教高手这个怎么做呢?
我在Form2的确定按钮的单击事件里不能调用主窗体,记得delphi里面是可以直接调用的,不知道c#如何实现。

解决方案 »

  1.   

    查询条件和查询方法放在一个单独的类里面
    Form2确定事件就调用这个类处理查询。
    判断Form2返回对话框结果,Form1再调用这个类更新数据
      

  2.   

    如何实现按Form2的确定按钮后调用主窗体呢,在form2中似乎不能控制到form1中的任何控件,我想按form2 的确定按钮后,form2隐藏,然后form1出现并且利用form2得到的数据来刷新form1的treeview
      

  3.   

    这应该是个矿体传值问题吧,在form1中设置一个string类型的变量用来保查询的语句private string sql;
    public forms(string sql)
    {
       this.sql=sql;
    }
    然后在form2中这样写
    form1 f=new form1(“查询语句,多条可以用|分割");
    this.Close();
    f.Show();
      

  4.   

    子窗口可以使用模态打开,这样主窗口就被阻塞,等子窗口操作完毕,可以通过属性返回,或者自己重写Show函数返回.
    如果不使用模态,那么就只有自己使用线程同步数据.
      

  5.   

    也可以用代理实现  我学这个的时候就是用代理做的在form1里面将你的事件  添加进一个代理然后在form2里面 实现
      

  6.   

          private void button1_Click(object sender, EventArgs e)
            {
            
                 Form2 form2 = new Form2();
            
               if(this.comboBox1.Text=="guest")
                    form2.Load += new EventHandler(form2.form21_Load);
           
               if(this.comboBox1.Text=="Adminstrator")
            
                  form2.Load += new EventHandler(form2.form22_Load);        
                   form2.Show();
           
       this.Hide();
            }
    form2:
     
    public void form21_Load(object sender, EventArgs e)
            {
                //throw new Exception("The method or operation is not implemented.");
                TextBox text=new TextBox();
                text.Text="guest";
                this.Controls.Add(text);
            }        public void form22_Load(object sender, EventArgs e)
            {
                //throw new Exception("The method or operation is not implemented.");
                TextBox text = new TextBox();
                text.Text = "Administrator";
                this.Controls.Add(text);
            }你参考下吧  我上课时候写的  但是我有一部分是申明的public 不知道是不是不好 因为我也学了才2个月