博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#实现Winform间的数据交互的三种方法
阅读量:5132 次
发布时间:2019-06-13

本文共 1658 字,大约阅读时间需要 5 分钟。

    (1)修改子窗体的构造函数:简单地说就是通过修改子窗体Form的构造函数,如下所示:

            public Form2(string Para1, ArrayList List1, TextBox textBox1, Form Form1)
            {
                    InitializeComponent();
            }
    
        上面的例子中,为子窗体Form2添加了4个参数,分别是:字符串Para1,字符数组List1,文本控件textBox1和父
        窗体Form1,下面简单区分一下它们各自的特点:

        <1> 字符串:单向的值传递,在子窗体中不能通过修改此参数的值来间接改变父窗体中的数据。
        <2> 字符数组:引用型传递,可以通过将父子窗体中不同的成员变量指向相同的数组,即可实现变更一方,同时更新
            对方的数据。
        <3> 控件: 引用型传递,可以通过修改该控件的数据来直接达到控制父窗体中该控件数据的目的。
        <4> 窗体: 这个最直接,直接将父窗体传递到子窗体中,我们可以方便地在子窗体中修改父窗体中所有授权为public
            的数据。

 

    (2)给窗体添加属性或方法:

            获取或设置拥有此窗体的窗体。若要使某窗体归另一个窗体所有,请为其 Owner 属性分配一个对将成为所有者的
        窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Form2 归窗体 Form1 
        所有,则关闭或最小化 Form1 时,也会关闭或最小化 Form2。并且附属窗体从不显示在其所有者窗体后面。可以将附
        属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。若要确定某父窗体拥有的窗体,
        请使用OwnedForms属性。
            我们可以通过下面的方式来确定这种从属的窗体关系:

                Form2 form = new Form2();
                form.Owner = this;
                form.ShowDialog();
                或者
                Form2 form = new Form2();
                form.ShowDialog(this);

 

            定了从属关系以后,我们就可以通过在Form的load事件中或者通过定义public的属性或者方法来彼此进行数据修

        改操作,简单操作如下:

                Form1 pareForm = (Form1)this.Owner;    
                pareForm.listData1 = pareForm.ListData2;

                     pareForm.txtBox1.Text = ....  //这里的txtBox1 必须为public 属性,在modifiers 中修改

             

 

     (3)通过委托的方法:

          相对以上两种方法来说,这种方法可能较复杂一些,但基本思路是一样的,需要修改的地方如下:

            <1> 在Form2.cs中添加委托函数定义:public delegate void SendFun(string str);
            <2> 在Form2.cs中添加委托示例:public event SendFun SendToParent;
            <3> 在Form2.cs中添加一个按钮,并添加其事件如下:
                private void button1_Click(object sender, EventArgs e)
                {
                    if (Send != null)
                    {
                        Send(this.textBox1.Text);
                    } 
                }

            <4> 在Form1.cs中添加方法RecvInfo()方法如下:
                private void RecvInfo (string str)
                {
                    textBox1.Text = str;
                }

            <5> 在Form1.Designer.cs中的InitializeComponent()方法中添加委托实例定义:
                this.myForm.Send += new Example3_Form2. SendFun (RecvInfo);

转载于:https://www.cnblogs.com/bboyxiaoming/archive/2011/10/24/2222890.html

你可能感兴趣的文章
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android-多线程AsyncTask
查看>>
LeetCode【709. 转换成小写字母】
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
【题解】青蛙的约会
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
[51nod] 1199 Money out of Thin Air #线段树+DFS序
查看>>
Red and Black(poj-1979)
查看>>
安装 Express
查看>>
存储(硬件方面的一些基本术语)
查看>>
观察者模式
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
Win磁盘MBR转换为GUID
查看>>
大家在做.NET B/S项目的时候多用什么设技术啊?
查看>>