加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

.net中两个窗体的传值问题

发布时间:2020-12-16 22:21:51 所属栏目:大数据 来源:网络整理
导读:编了快半年的程了,发现自己水平真是低的可怜,买了2个半月的电脑今天才用来学习了!终于有一天晚上没打星际了! 在网上找关于.net的事件委托。找了一些,感觉是皮毛,理解还不是很深,但又怕自己忘了,所以贴出来!同时也催促自己。关于2个窗体间的传值问题
编了快半年的程了,发现自己水平真是低的可怜,买了2个半月的电脑今天才用来学习了!终于有一天晚上没打星际了! 在网上找关于.net的事件委托。找了一些,感觉是皮毛,理解还不是很深,但又怕自己忘了,所以贴出来!同时也催促自己。关于2个窗体间的传值问题,3个类,一个中间类,用来存放传的值,2个窗体,主窗体一个textbox,一个button,副窗体就一个textbox,当副窗体textbox值变时,主窗体textbox也变! 代码如下:C#.net:中间类:using System;namespace WindowsApplication1 { //定义一个委托 public delegate void SendMessage(string s);public class cResult { //声明一个类事件,类型是上面的委托 public event SendMessage txtChange; //存放结果的中间变量 public string r1 = string.Empty ; //定义一函数,目的是在form2中调用次函数,然后引发txtChange事件 //而txtChange事件具体实现在form1中,正好可以改变文本框text值 public void ChangeText(string s ){ //判断是否为空 if (txtChange!=null){ //触发事件 txtChange(s); } } } } 主窗体:private void button1_Click(object sender,System.EventArgs e) { //实例化一个中间类 cResult r = new cResult(); //订阅此类的txtChange事件为SendMessage,具体实现内容在方法:Message中 r.txtChange +=new SendMessage(Message); //实例化form2 Form2 fr2 = new Form2(r); //显示form2窗体.fr2.Show()两个窗体都可以看,但是ShowDialog方法,最小化其中一个,另外一个也最小化 fr2.ShowDialog(); } private void Message(string s) { //form2的文本框值给form1的文本框 this.textBox1.Text=s; } 副窗体://定义一个中间类 private cResult r; //构造函数 public Form2(cResult r):this() { //接收从form1传过来的中间类cResult this.r=r; }private void textBox1_TextChanged(object sender,System.EventArgs e) { //当文本框改变时,调用中间类的ChangeText函数,从而引发txtChange事件 r.ChangeText(this.textBox1.Text ); } vb.net:中间类:'定义一个委托 Public Delegate Sub SendMessage(ByVal str As String)Public Class cResult '声明一个类事件,类型是上面的委托 Public Event TextChange As SendMessage '存放结果的中间变量 Dim r1 As String = String.Empty '定义一函数,目的是在form2中调用次函数,然后引发txtChange事件 '而txtChange事件具体实现在form1中,正好可以改变文本框text值 Public Sub ChangeText(ByVal str As String) Try '不知道如何判断事件是否为空?,所以加了try...catch.. '触发事件 'vb.net中用关键字RaiseEvent调用事件 RaiseEvent TextChange(str) Catch ex As Exception '... End Try End Sub End Class 主窗体:Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click '实例化一个中间类 Dim r As New cResult '订阅此类的TextChange事件为SendMessage,具体实现内容在方法:Message中 '好像和定义的委托SendMessage没什么关系,暂时不明白。???AddHandler r.TextChange,New EventHandler(AddressOf SendMessage(Message)) AddHandler r.TextChange,AddressOf Message '实例化form2 Dim fr2 As New Form2(r) '显示form2窗体.fr2.Show()两个窗体都可以看,但是ShowDialog方法,最小化其中一个,另外一个也最小化 fr2.ShowDialog() End Sub Private Sub Message(ByVal str As String) 'form2的文本框值给form1的文本框 Me.TextBox1.Text = str End Sub 副窗体: '定义一个中间类 Private r As cResult Public Sub New(ByVal r As cResult) MyBase.New() '该调用是 Windows 窗体设计器所必需的。 InitializeComponent() '接收从form1传过来的中间类cResult Me.r = r '在 InitializeComponent() 调用之后添加任何初始化 End SubPrivate Sub TextBox1_TextChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles TextBox1.TextChanged '当文本框改变时,调用中间类的ChangeText函数,从而引发txtChange事件 r.ChangeText(Me.TextBox1.Text) End Sub

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读