网站首页 > 基础教程 正文
大家好,我是华山自控编程朱老师
前几天一个学员在学习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值。
总结如下:
- 在form2里面定义一个委托类型,在form2的文本框键盘事件里面调用委托对象。
- 在form1的按钮事件里面,给form2的委托变量赋值 委托方法。
- 在 form1的委托方法里面把接受到的字符串变量赋值给form1的文本框
文章如果对你有用,麻烦点赞,评论~
最近很多小伙伴找我,说想要一些学习资料,然后我根据自己从业二十年经验,精心整理了一份「上位机编程入门到高级教程+工具包」,点个关注,以下是领取入口:
猜你喜欢
- 2024-12-28 CSnakes:在.NET项目中嵌入Python代码的工具
- 2024-12-28 巧用泛型设计模式,提升代码质量新高度
- 2024-12-28 巅峰对决!Spring Boot VS .NET 6 巅峰对决之干碎龙王短剧全集完整版第5集
- 2024-12-28 基于C#开发的物联网设备通讯协议客户端终身开源免费
- 2024-12-28 C# Flurl 库浅析(一) c#folderbrowserdialog
- 2024-12-28 C# Lazy的缺点 c#的介绍
- 2024-12-28 微服务——webapi实现,脱离iis,脱离tomcat
- 2024-12-28 231.C# 跨平台服务开发 c++跨平台开发
- 2024-12-28 C# 和 .NET 开发的 10 种基本模式
- 2024-12-28 基于C# 开发的物联网设备通讯协议客户端
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)