首先说明是一个应用程序中的两个WinForm窗体(Form1,Form2)
想点击Form2上的一个Button后将一个字符串赋给Form1上的TextBox
要求:
1.使用代理(委托)2.给我可执行代码 不要告诉我怎么写 理论上我也写的出 实际上怎么就没实现出来
3.谢谢所有回帖的兄弟姐妹
想点击Form2上的一个Button后将一个字符串赋给Form1上的TextBox
要求:
1.使用代理(委托)2.给我可执行代码 不要告诉我怎么写 理论上我也写的出 实际上怎么就没实现出来
3.谢谢所有回帖的兄弟姐妹
//假设由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 = ""; //这里写你想要的字符串。
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; } }
}
{
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%都是按方案一做的。
{
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);
}
} }