点击一个按钮同时加载两个Form窗体Form1、Form2,如何在这两个窗体之间传值?

解决方案 »

  1.   

    form2定义一个public变量,直接在form1里写
    form2.xxx=yyy;
      

  2.   

    问题详细说明:一个窗体里是数型控件,另一个窗体是listview控件,点击treeview里面的节点,在listview中显示这个节点对应的数据库信息
      

  3.   

    数据库查询要通过点击的treenode.text来查询,目的就是要把treenode.text传给含有listview的窗体中,怎么实现?谢谢!
      

  4.   

    网上找到的例子:
    Form2:
             public delegate void returnvalue(string i);
            public returnvalue ReturnValue;
            public Form2()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                if (ReturnValue != null)
                    ReturnValue(textBox1.Text);
                this.Close();
            }
    Form1:        private void button1_Click(object sender, EventArgs e)
            {
                Form2 temp = new Form2();
                temp.ReturnValue = new Form2.returnvalue(showvalue);
                temp.ShowDialog();
            }
            private void showvalue(string i)
            {
                textBox1.Text = i;
            } 点击Form1的按钮弹出Form2,点击Form2按钮,返回值至Form1显示;
      

  5.   

    饿C#饿C#不像VB,定义个模块就好了。虽然也能用,不过要在VB里写上个很简单的模块,然后生成DLL,在C#的项目里引用这个DLL和VB运行库,哈,麻烦了点C#里偶不知道咋做比较方便,呵呵,VB.NET里定义个模块就成了抱歉抱歉
      

  6.   

    小试验了下。在你C#项目里,命名空间中定义个public结构体,
    把你要共享的数据变量放在这个结构提里,定义为public static,
    这样你命名空间中的所有类(例如Form1、Form2)中,都能访问这个结构体了这方法简单,呵呵。几乎都在用VB.NET现在,C#忘记的差不多了
      

  7.   

    Form1窗体里
    namespace WindowsApplication1 {
    public struct aaa{
    public static int a;
    } public class Form1 : System.Windows.Forms.Form{
             //class Form1         //随便来个BUTTON做例子
    private void button1_Click(object sender, System.EventArgs e){
    aaa.a=10;
    }
    }
    }Form2窗体里
    namespace WindowsApplication1{
    public class Form2 : System.Windows.Forms.Form{
    private void button1_Click(object sender, System.EventArgs e){
    aaa.a=20;
    }
    }
    }这两个aaa.a是同一个变量。反正是写在命名空间里,写在类外,public static修饰,以上。
      

  8.   

    把两个窗口的值传给他们的owner假如他们有同一个owner
      

  9.   

    谢谢各位,但是现在我的实现不是在form1里面点击button弹出form2,是两个窗体一起出来,不知道该如何在这两个窗体之间怎么传值。
      

  10.   

    这样的话,可以通用定义静态变量来实现,
    两个form 都可以通过类名.变量名 访问的到
      

  11.   

    两个窗口的共有参数,放在任何一个FORM里作为属性都不好吧,假设放在FORM1里,FORM1 CLOSE掉后,FORM2就不能访问了我在13、14楼说了,在命名空间中,在两个FORM CLASS外定义一个静态的结构体,如果参数够多的话或者就实体关联的话就定义一个专门用来放共有参数的类,类中的属性都定义为静态就好了啊
      

  12.   

    你这种情况最好用delegate来做代码未经测试:
    public delegate void TreeNodeSelectedHandler( TreeNode Node);public class Form1 :Form
    {
     ...
       public TreeNodeSelectedHandler TreeNodeSelected;   //Form1上的树节点的选择事件
       private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
       {
             if( TreeNodeSelected != null)
             {
                 TreeNodeSelected( e.Node );
             }
       }}
    public class Form2 :Form
    {
         //Form2响应树选择事件
         public void  Form2_TreeNodeSelected(TreeNode Node)
         {
                //根据Node加载 listview 
         }
    }//调用代码
    Form1 frm1  = new Form1(..);
    Form2 frm2  = new Form2(...);
    frm1.TreeNodeSelected += new TreeNodeSelectedHandler(frm2.Form2_TreeNodeSelected);
    frm1.Show();
    frm2.Show();
      

  13.   

    你要是不太愿意这样弄来弄去的,还有一个比较简单的方法把Form1上树的响应事件写在Form2里
    public Form1:Form
    {
        //private System.Windows.Forms.TreeView treeView1;
        public System.Windows.Forms.TreeView treeView1; //改为public
    }
    public Form2:Form
    {
       public void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
       {
              //根据e.Node加载ListView
       }
    }//调用代码Form1 frm1  = new Form1(..);
    Form2 frm2  = new Form2(...);frm1.treeView1.AfterSelect  //frm1
    += new System.Windows.Forms.TreeViewEventHandler
    (frm2.treeView1_AfterSelect);//frm2frm1.Show();
    frm2.Show();
      

  14.   

    crossrowman,牛!太感谢你了,搞定。
    冒昧问一下,能不能留个你的联系方式?
      

  15.   

    crossrowman 是很牛,以前从来没有这样想过