专业编程基础技术教程

网站首页 > 基础教程 正文

C# 常见技能_委托 c#委托的实现

ccvgpt 2024-12-28 11:46:54 基础教程 2 ℃

大家好,我是华山自控编程朱老师

前几天一个学员在学习C#与委托交互时。一直是获取不到另一个窗体上文本框的值,

C# 常见技能_委托 c#委托的实现

截图如下:

不知道什么原因。

其实很多初学者在学习vs和委托交互时,都会遇到类似的问题,不知道是直接通过窗体对象来获取,还是通过委托获取。下面我们就举一个入门案例来讲解Winform中如何利用委托来实现窗体之间的传值

Winform中利用委托实现窗体之间的传值

有这样两个窗体,一个是form1,一个是form2.当我点击form1中的按钮,则窗体form2显示出来。

然后当我在窗体2中的文本框中实时输入字符时,form1中的文本框要跟窗体2中的文本框显示同样的内容。

这就涉及到了窗体之间的传值问题。

实现这个效果有很多种方法,这里我说下怎么应用委托来达到窗体之间传值的目的。

首先点击form1中的按钮来显示Form2

然后,要想实时获取Form2中的内容,我们就得在Form2的textBox2中创建一个KeyUp事件。

那么现在的问题就来了,怎么让form1中的文本框显示Form2的文本框中的内容。

首先,我们可以在form1中定义一个方法,这个方法接受一个字符串参数,方法的作用就是为form1中的文本框赋值

那么我们只要能够在Form2中调用到这个方法,并且将keywords中的值传给这个方法,那么我们就能让form1来显示Form2中文本框的值。把一个函数当做参数传递,这时候我们就用到了委托。

新建一个类,名字随便写,里面只需添加这样一句代码。

public delegate void updataForm1textDelegate (string msg);

也就是声明一个委托,这个委托必须跟预委托的方法具有相同的签名,也就是要跟它能够委托的方法具有相同的返回值类型和参数。

之后我们在Form2中添加一个公有字段

public updataForm1textDelegate updataForm1text;

同时在TextBox2KeyUp这个事件处理函数中添加

string keywords = this.textBox2.Text;

updataForm1text.Invoke(keywords);

然后在form1的按钮处理函数中添加

f2.updataForm1text = updateForm1Text;

updateForm1Text方法赋值给updataForm1text这个委托。

到这里,整个案例就讲解完了。当然。我们也可以通过在form1里面定义一个监听线程或者定时器,通过单例模式f2对象拿到textbox2的text值。

总结如下:

  1. 在form2里面定义一个委托类型,在form2的文本框键盘事件里面调用委托对象。
  2. 在form1的按钮事件里面,给form2的委托变量赋值 委托方法。
  3. 在 form1的委托方法里面把接受到的字符串变量赋值给form1的文本框

文章如果对你有用,麻烦点赞,评论~

最近很多小伙伴找我,说想要一些学习资料,然后我根据自己从业二十年经验,精心整理了一份「上位机编程入门到高级教程+工具包」,点个关注,以下是领取入口:

点击领取上位机编程全套入门教程+工具

Tags:

最近发表
标签列表