C#中表單間傳遞資料的幾種方法

來源:互聯網
上載者:User
  在編寫C#windows應用程式的時候我們經常會遇到這種問題,怎麼樣在兩個表單間傳遞資料呢?例如,用C#做一個文字編輯器,裡面有一個搜尋功能(即搜尋我開啟的文本裡面的文字),點搜尋則彈出搜尋對話方塊,輸入要搜尋的內容,然後確定,就可以搜尋到我開啟的文本裡面的文字了,這裡就用到了兩個表單間的相互連信。我查看了相關的資料想了想,得出一些想法和方法。

    也許有的人會覺得這個很簡單呀。假如主架構為Form1,開啟的搜尋對話方塊是Form2.直接在Form2類中申明一個Form1執行個體:Form1 f1=new Form1();然後就可以通過f1來調用Form1中的域和函數了。其實不是這樣的,你申明的新的Form1執行個體不是原來的那個Form1對象了,這樣操作的是新的Form1中的域和函數,和最先開啟的Form1是沒有關係的。

那應該如何來完成兩個表單的通訊呢?我們要做的是把當前的Form1執行個體傳遞給Form2,如果是這樣的話,問題就很好解決了。

方法1:首先,我們在Form2中定義:

private Form1 mF_Form

我們更改Form2的建構函式為有參數的

public Form2 ( Form1 myForm )

{

//

// Windows 表單設計器支援所必需的

//

InitializeComponent ( ) ;

this.mF_Form  = myForm ;   /////這樣在Form1中申明Form2的時候就把Form1的執行個體傳遞過來了

//

// TODO: 在 InitializeComponent 調用後添加任何建構函式代碼

//

}

在Form1中,我在 要用到Form2的地方申明如下:

Form2 f2=new  Form2(this);////這裡的this指的就是Form1當前的執行個體,也就是把當前Form1的執行個體通過Form2的建構函式傳遞給Form2類(其實在網上看到過比較蠢的方式,就是在建構函式裡面傳遞要傳遞的資訊如:字串或是數字等,這樣做很有局限性,不能傳遞其他的,所有我們可以直接傳遞執行個體,來完成傳遞更多的資訊。)

這樣在Form2中使用myForm 就可以對原來的Form1視窗進行操作了。但是你要把要操作的Form1中的域和函數定義成public形式的(這樣可能不安全),此時的myForm就是真正的最開始開啟的Form1了,你可以用這個執行個體來進行兩個表單的通訊了。

方法2:其實C#中提供了表單間進行通訊的現成的屬性,呵呵,我們能想到的,微軟也想到了,他們創造的語言其實確實可以說是人性化了。

在Form1類中申明Form2時用如下代碼:

Form2 f2=new Form2();//////類Form2中的建構函式不改,還是無參的

f2.owner=this;////這裡的this指的是類Form1當前的執行個體。

//也可以使用函數的方法,給當前執行個體添加一個附屬視窗  代碼:this.AddOwnedForm(f2);

在Form2類的定義中寫如下代碼:

Form1 f1=this.owner;

這樣f1對應的就是原來的Form1的執行個體了,也就可以用這個進行通訊了。但是還是要把不同類之間訪問的域和函數定義成public,哎,安全確實是一個問題!!

慢慢解決中......(將public改成protected internal 讓繼承類或者是同一個程式集中的類進行訪問)

不知道還有沒有其他的方法,有的話請告訴我~~~~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.