我的目的是:在frm1中打开frm2,在frm2中选择数据x,然后关闭frm2,同时x显示在frm1的text里面。
解决方法是:在frm1中new一个类class 的实例mcla,然后改写frm2构造函数public frm2(class tx),在frm1中打开frm2时传递这个类,frm2 fre = new frm2(mcla) fre.Show()请问后面如何处理这个类才能达到目的?处理这个类的代码写在frm2的那个事件中?或者有其他方法解决这个问题么?我是新手,最好能给段代码,不胜感激!

解决方案 »

  1.   

    按照你的思路,就是在FORM2上选取完数据后给类变量赋值,关闭的时候回传
      

  2.   


    public partial class Form2 : Form
    {
            private int _x=0;
            public int x 
            {
                set { _x = value; }
                get { return _x; }
            }
    }public partial class Form1 : Form
    {
            private void button1_Click(object sender, EventArgs e)
            {
                Form1 frm = new Form2();             if (frm.ShowDialog() == DialogResult.OK)
                {
                    Textbox1.Text=frm.x;
                }  
            }
    }
      

  3.   


    不行啊!另外,Form1 frm = new Form2(); 这里是不是写错了?
      

  4.   

    简单想法:
    1.将Form1中将要获得Form2中返回值TextBox设置为Public;-- public TextBox  TextBox1 = new TextBox();--
    2.创建Form2实体的时候,将Form1对象传到Form2;--new Form2(this).ShowDialog();--Form2变量Form1 frm接收:
    3.可以在Form2中更改Form1对象中的TextBox中的值.--frm.TextBox1.Text="";--*若存在安全性问题:
    1.可以试试Form1中的Form.CheckForIllegalCrossThreadCalls属性设置为false;

    2.可以将Form2对象的TopLevel属性设为false;
      

  5.   

    1:使用delegate 是一种办法
    2:另外最简单的办法是,将父窗口引用传递给子窗口,然后在子窗口的关闭事件中给父窗口的属性赋值
    1的缺点是:实现稍微麻烦点
    2相当简单。很容易理解
      

  6.   

    没有看清题目,Sorry 但愿对你有点帮助.
      

  7.   

    对象的实例在内存中是唯一的,你大可以将text控件变成from2的属性,那就可以在from2中直接改变text的属性了:
    例如text为TextBox控件
    public partial class Form2 : Form
    {
            private TextBox _x;
            public TextBox x 
            {
                set { _x = value; }
            }
    ///那么就可以在from2里面更改TextBox的属性了
    }public partial class Form1 : Form
    {
            private void button1_Click(object sender, EventArgs e)
            {
                Form1 frm = new Form2(); 
                frm.x=你的textbox控件;
                frm.ShowDialog() 
            }
    }
      

  8.   


    public partial class Form2 : Form
    {
            private int _x=0;
            public int x 
            {
                set { _x = value; }
                get { return _x; }
            }        private void btnOK_Click(object sender, EventArgs e)
            {
                _x=10;
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            private void btnCancel_Click(object sender, EventArgs e)
            {
                this.DialogResult = DialogResult.Cancel;
                this.Close();
            }
    }public partial class Form1 : Form
    {
            private void button1_Click(object sender, EventArgs e)
            {
                Form2 frm = new Form2();             if (frm.ShowDialog() == DialogResult.OK)
                {
                    Textbox1.Text=frm.x;
                }             frm.Dispose(); 
            }
    }
      

  9.   

    属性,我试过,关键是怎么实现?我这样写的,可是不行:public partial class Form2 : Form
        {
            private string _x = "";
            public string x
            {
                set { _x = value; }
                get { return _x; }
            }
            private void Form2_FormClosed(object sender, FormClosedEventArgs e)
            {
                this.x = "wwwwww";
            }
        }
     public partial class Form1 : Form
        {
            private void textBox1_DoubleClick(object sender, EventArgs e)
            {
                Form2 frm = new Form2();
                frm.Show();
                
                this.textBox1.Text = frm.x;
                
            }
        }
      

  10.   

    好的,谢谢!关键在这里:
    if (frm.ShowDialog() == DialogResult.OK)
                {
                    Textbox1.Text=frm.x;
                } 
      

  11.   

    不要用Show要用ShowDialog.用SHOW的话,你还没设值呢,this.textBox1.Text = frm.x;
    这条就已经执行过去了.this.DialogResult = DialogResult.OK;
    把这个加上
      

  12.   

    其实最好的就是使用接口来实现你的要求,这样可扩展性比较好,只要任何窗体承继于该接口都可以使用from2提供的功能,例如:
    interface aa
    {
       public void ChangeText(string text);
    }
    public partial class Form2 : Form 

            private aa _x; 
            public aa x 
            { 
                set { _x = value; } 
            } 
             pulic Form2(aa temp)
             {
                _x=temp;
             }
    ///在需要赋值的时候就执行接口aa的ChangeText方法
    } public partial class Form1 : Form ,aa

            private void button1_Click(object sender, EventArgs e) 
            { 
                Form1 frm = new Form2(this);  
                  frm.ShowDialog() 
            } 
            ///实现接口的函数
            public void ChangeText(string text)
            {
               //你的赋值操作
            }
    }