用委托进行窗体之间回传值

来源:互联网 发布:iphone移动数据不能用 编辑:程序博客网 时间:2024/04/30 06:55

来自: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

以书会友城交天下朋友。

 

例子下载:http://download.csdn.net/detail/mypc2010/5689911