首先说明是一个应用程序中的两个WinForm窗体(Form1,Form2)
想点击Form2上的一个Button后将一个字符串赋给Form1上的TextBox
要求:
1.使用代理(委托)2.给我可执行代码 不要告诉我怎么写 理论上我也写的出 实际上怎么就没实现出来
3.谢谢所有回帖的兄弟姐妹

解决方案 »

  1.   


    //假设由Form1打开Form2。
    //1:设置Form1上的TextBox(假设名称为txtBox1)的Modifier为Public
    //2:打开窗口F2
    Form2 f2 = new Form2();
    f2.Tag = this;//3:点击F2上的Button时
    Fomr1 f1 = (Form1)this.Tag;
    f1.txtBox1.Text = "";   //这里写你想要的字符串。
      

  2.   

    属性,构造函数,事件,窗体传值的方式很多的!呵呵
    form1: 
    public partial class Form1 : Form 
        { 
            public Form1() 
            { 
                InitializeComponent(); 
            }         private void button1_Click(object sender, EventArgs e) 
            { 
                Form2 frm = new Form2(); 
                if (frm.ShowDialog() == DialogResult.OK) 
                { 
                    this.textBox1.Text = frm.test;            
                }              
            } 
        } 
    form2: 
    public partial class Form2 : Form 
        { 
            public Form2() 
            { 
                InitializeComponent(); 
            } 
            
            public string test 
            { 
                get { return textBox1.Text; }         }  
        } 
      

  3.   

    用委托,就这个应用来说简直麻烦得要死。public delegate void SetText(string s);public class Form2:Form
    {
        public SetText SetText{get;set;}
        
        private void button1_Click(object sender, EventArgs e)
        {
           //注意做一个非空的判断
           if(SetText!=null)SetText(someString);    //这里的someString是你的字符串变量 
        }
    }//在你调用Form2窗口之前,需要设定这个SetText委托。假设Form1的代码如下:
    public class Form1:Form
    {
        public void SetTextBoxText(string s)
        {
            txtBox.Text = s;
        }    private void button2_Click(object sender, EventArgs e)
        {
           Form2 f2 = new Form2();
           f2.SetText = SetTextBoxText;
           f2.Show();
        }
    }就这种应用模式中,我一开始给的方案的区别在于方案一提供的是整个Form1对象,这样一来你完全可以进行其它一些你无法预计的操作,比如:
    ((Form1)this.Tag).Close();    //把窗口1给关了。
    而如果使用委托,你最多也就只能调用这个SetText修改文本框内容,无法进行其它操作。
    从规模化软件设计的角度来说我觉得应该使用委托,不过你自己学着玩或者一些不重要的软件,我敢说80%都是按方案一做的。
      

  4.   

    Form1:        private void button2_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                f2.Set += new SetText(SetString);
                f2.Show();
            }
            public void SetString(string Input)
            {
                if (Input != "")
                {
                    this.textBox1.Text = Input;
                }
            }
    Form2:
      public delegate void SetText(string strInput);
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
            private event SetText set;        public event SetText Set
            {
                add { set += value; }
                remove { set -= value; }
            }        private void button1_Click(object sender, EventArgs e)
            {
                if (set != null)
                {
                    set(textBox1.Text);
                }
            }    }