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

来源:互联网 发布:亚信数据 编辑:程序博客网 时间:2024/06/05 11:26
编了快半年的程了,发现自己水平真是低的可怜,买了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