来自:http://blog.csdn.net/mypc2010/article/details/9229791
有这样两个窗体,一个是MainForm,一个是Form2.当我点击MainForm中的按钮,则窗体2显示出来。
然后当我在窗体2中的文本框中输入任意字符,MainForm中的文本框要跟窗体2中的文本框显示同样的内容。
这就涉及到了窗体之间的传值问题。
实现这个效果有很多种方法,这里我说下怎么应用委托来达到窗体之间传值的目的。
首先点击MainForm中的按钮来显示Form2
void ButtonShowFrom2Click(object sender, EventArgs e)
{
Form2 f2 = new Form2 ();
f2.Show();
}
然后,要想实时获取Form2中的内容,我们就得在Form2的TextBoxFrom2中创建一个KeyUp事件。
void TextBoxFrom2KeyUp(object sender, KeyEventArgs e)
{
//当键盘按下时获取到用户输入的内容,并且保持到字符串keywords中。
string keywords = this.textBoxFrom2.Text;
}
那么现在的问题就来了,怎么让MainForm中的文本框显示Form2的文本框中的内容。
首先,我们可以在MainForm中定义一个方法,这个方法接受一个字符串参数,方法的作用就是为MainFrom中的文本框赋值
void updateMainform(string msg)
{
this.textBoxMain.Text=msg;
}
那么我们只要能够在Form2中调用到这个方法,并且将keywords中的值传给这个方法,那么我们就能让MainForm来显示Form2中文本框的值。把一个函数当做参数传递,这时候我们就用到了委托。
新建一个类,名字随便写,里面只需添加这样一句代码。
public delegate void uptextDelegate(string msg);
也就是声明一个委托,这个委托必须跟预委托的方法具有相同的签名,也就是要跟它能够委托的方法具有相同的返回值类型和参数。
之后我们在Form2中添加一个共有字段
public uptextDelegate uptext;
同时在TextBoxFrom2KeyUp这个事件处理函数中添加
uptext.Invoke(keywords);
然后在MainFrom的按钮处理函数中添加
f2.uptext = updateMainform;
把updateMainform方法赋值给uptext这个委托。
到此,整个例子就做完了,如果还有不懂的可以直接下载这个dome看看。
本人QQ:798033502
以书会友城交天下朋友。