日期:2023-05-17
来源:玫瑰财经网
浏览:次
大家好,我是华山自控编程朱老师
前几天一个学员在学习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的文本框文章如果对你有用,麻烦点赞,评论~
最近很多小伙伴找我,说想要一些学习资料,然后我根据自己从业二十年经验,精心整理了一份「上位机编程入门到高级教程+工具包」,点个关注,以下是领取入口:
点击领取上位机编程全套入门教程+工具
500吨汽车吊作业性能表(汽车吊支腿反力及抗倾覆验算)
石碣镇汽车站(今天,石碣汽车客运站恢复运营)
招贤汽车站(9月14日起,莒县K601路增开大站快车)
北京福田汽车图片(自重不到两吨,详解福田领航S1小卡)
东风轻型汽车(“东风轻型车”横空出世 未来无人驾驶车将快递送到家门口)
周口市汽车东站(郑阜高速铁路上的主要客运站——周口东站)
Copyright (c) 2022 玫瑰财经网 版权所有
备案号:冀ICP备17019481号
玫瑰财经网发布此信息的目的在于传播更多信息,与本站立场无关。玫瑰财经网不保证该信息(包含但不限于文字、视频、音频、数据及图表)全部或者部分内容的准确性、真实性、完整性、有效性、及时性、原创性等。
相关信息并未经过本网站证实,不对您构成任何投资建议,据此操作,风险自担。