C#實現Winform間的資料互動的三種方法

iDotNetSpace發表於2010-03-05

    使用.NET編寫winform程式,比較常見的一種情況就是如何實現Form間的資料互動,下面就簡單總結一下常見的幾種資料互動方式:

 

    (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;   
                this.listData1 = pareForm.ListData2;

 

     (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);

 

        通過上面五步操作,即可達到Form間的通訊的目的。希望這個總結能夠對大家有所幫助。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-628713/,如需轉載,請註明出處,否則將追究法律責任。

相關文章