编了快半年的程了,发现自己水平真是低的可怜,买了2个半月的电脑今天才用来学习了!终于有一天晚上没打星际了! 在网上找关于.net的事件委托。找了一些,感觉是皮毛,理解还不是很深,但又怕自己忘了,所以贴出来!同时也催促自己。关于2个窗体间的传值问题,3个类,一个中间类,用来存放传的值,2个窗体,主窗体一个text
Box,一个button,副窗体就一个text
Box,当副窗体text
Box值变时,主窗体text
Box也变!
代码如下: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.text
Box1.Text=s; } 副窗体://定义一个中间类 private cResult r; //构造
函数 public Form2(cResult r):this() { //接收从form1传过来的中间类cResult this.r=r; }private void text
Box1_TextChanged(object sender,System.EventArgs e) { //当文本框改变时,
调用中间类的ChangeText
函数,从而引发txtChange事件 r.ChangeText(this.text
Box1.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.Text
Box1.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 Text
Box1_TextChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Text
Box1.TextChanged '当文本框改变时,
调用中间类的ChangeText
函数,从而引发txtChange事件 r.ChangeText(Me.Text
Box1.Text) End Sub
原文链接:https://www.f2er.com/vb/259567.html