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

编了快半年的程了,发现自己水平真是低的可怜,买了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

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...