C 中窗體間傳遞資料的幾種方法

2021-04-12 22:27:02 字數 2266 閱讀 5342

經常會遇到c#中窗體間傳遞資料,搜了一下網上的資料,做一下彙總

乙個稍微複雜一點的程式一般都有兩個或者更多的窗體。有時在程式設計中,資料不僅要在同乙個窗體中傳遞,還要在窗體間傳遞,尤其是用子窗體如何改變父窗體。這個問題已經不少人問過,在群裡也為了那種方式好而爭論過,昨天雨聲.net問窗體間互操作的問題,讓我萌生就這個問題寫下這篇文章,希望對剛剛接觸c#的朋友有所幫助,有疏漏之處,也希望朋友們指正,歡迎討論。

窗體間傳遞資料,無論是父窗體操作子窗體,還是子窗體操作符窗體,無外乎以下幾種方式:

公共靜態變數;

使用共有屬性;

使用委託與事件;

通過建構函式把主窗體傳遞到從窗體中;

使用中間類。

前4種方法適用的人比較多,大家也比較熟悉,我這裡就不多說了,主要想詳細介紹一下第五種,使用中間類的方法。比如從frm1開啟frm2,在frm2中把frm1的text值改變為使用者輸入的字串,並且關閉frm2。

首先先定義乙個中間物件observe

using system;

namespace demo

set}

public observe()}}

在form2中定義乙個observe成員

private observe o_observer;

public observe observe

}在form2的事件處理中改變o_observe的strtext

private void button1_click(object sender, system.eventargs e)

在form1中例項化乙個observer成員

private observe o_observe = new observe();

在form1的事件處理函式中建立form2的例項,令form2的observe屬性等於form1的o_observe並且訂閱observe的事件

private void button1_click(object sender, system.eventargs e)

這樣,form1知道form2,form2不知道form1執行結果如下:

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

private form1 mf_form

我們更改form2的建構函式為有引數的

public form2 (form1 myform)

在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,哎,安全確實是乙個問題!!

這個主要是演示資料庫操作的資料傳遞

HTTP傳遞資料的幾種方法

http請求的時候,需要傳遞引數給後端,一般都是key value的形式,傳遞的方法有很多種 例如需要傳遞的資料是 dict key1 value1,key2 value2 把引數放在url中,適用於所有的http請求method,例如get,post 例如 對應requests模組的params引...

Vue Router 傳遞資料的幾種方法

官方文件vue router 1.通過 path 傳遞this.router.push this.router.push user 注 這樣傳遞引數的話,配置路由的時候需要在 path 上加引數 path user userid 這種接收引數的方式是 this.route.params.userid...

C 中窗體間資料傳遞的兩種方法

c 中有時需要在其他窗體上訪問主窗體中的成員資料或系統中一些基本配置資料要在不同的窗體中使用,就需要在不同窗體間傳遞相同資料。以下總結兩種窗體間資料傳遞的方法。1,訪問主窗體中的成員資料的方法 1 建立乙個應用程式 已有主窗體form1 2 再新增乙個窗體 form2 3 在form1中新增乙個按鈕...