C 中窗體間傳遞引數問題

2022-05-25 04:39:11 字數 2798 閱讀 5592

c#中窗體間傳遞引數問題

在windows form之間傳值,我總結了有四個方法:全域性變數、屬性、窗體建構函式和delegate。

第乙個全域性變數:

這個最簡單,只要把變數描述成static就可以了,在form2中直接引用form1的變數,**如下:

在form1中定義乙個static變數public static int i= 9 ;

form2中的鈕扣按鈕如下:

private

void button1_click(object

sender, system.eventargs e)

第二個方法:

這也許是個老話題了,但是今天我在用property 時卻有了新的發現。那就是如果傳遞的是類的話,那麼是按位址(引用)來傳遞的。例如如下兩個程式。假設有兩個form,form1、form2和乙個class1.cs的類檔案。form1是程式的開始窗體,通過form1 來呼叫form2 。程式如下:

class1.cs檔案的內容是

public

class

class1

public

void modify( int

u )

}

form1中的內容是

private

class1 ttt;

private

void form1_load(object

sender, system.eventargs e)

private

void button1_click(object

sender, system.eventargs e)

private

void button2_click(object

sender, system.eventargs e)

form2中的內容是:

private

class1 change;

public

class1 change

set }

private

void button1_click(object

sender, system.eventargs e)

private

void button2_click(object

sender, system.eventargs e)

執行程式你會發現,改form1 中的textbox值,那麼form2 中change中的i 的值也會相應的變,同樣form2中change的 i 值變了,那麼form1 中的 ttt 中的 i 也相應的變了。就好像兩個form在使用同乙個資料變數一樣,為什麼呢?

經過思考,其實很簡單,原因就在於我們在使用property傳遞資料時使用了同一塊記憶體空間。

在傳遞class型別的資料時(如上),由於我們沒有new乙個新的例項,而是直接賦值,所以就相當於使用了引用,把上面的賦值過程改成下面這樣,

private

class1 change;

public

class1 change

set  }

那麼兩個form中的值相互之間就不再有什麼關聯了,也就是說,改其中乙個,不會影響另外乙個。這也給了我們乙個啟示,當我們想在form之間傳值時,而且還想讓值之間有一定的聯絡,那麼就把這些值用class來包起來,再傳。這樣又清楚又省事。

如果你傳的不是類而是一般資料(int , string )等,那麼這些資料在form之間是沒有聯絡的,因為c#在定義這些資料型別時,就預設new了他們,例如:int i ; 和int i = new int() ; 是一樣的,所以我以前經常在form之間傳遞簡單的變數時,沒有發現資料之間的關係,直到今天傳 class 時才發現。像下面這樣的 class :

class

temp

}

在form之間傳遞時,變數 i 是兩個窗體共用的,但是mm 卻不是,其原因就是我上面講的那樣,所以利用property的這個特性,我們可以靈活的在form之間傳遞我們想變和不想變的值。

第三個方法是用建構函式:

form1 的button按鈕這樣寫:

private

void button1_click(object

sender, system.eventargs e)

form2 的建構函式這樣寫:

public form2( int

i )

第四個方法是用delegate,**如下:

form2中先定義乙個delegate

public delegate void returnvalue( int i );

public returnvalue returnvalue;

form2 中的button按鈕**如下:

private

void button1_click(object

sender, system.eventargs e)

form1中的button按鍵如下:

private

void button1_click(object

sender, system.eventargs e)

private

void showvalue( int

i )

ps:自己程式設計的時候老是想著別人是怎麼實現的,一點也沒有物件導向的概念,一點想法都不願意想,也不去想,這樣怎是個頭啊!

C 執行緒間傳遞引數

我們如果定義不帶引數的執行緒,可以用threadstart 帶乙個引數的用parameterizedthreadstart。帶多個引數的用另外的方法,下面逐一講述。一 不帶引數的 c sharp view plain copy using system using system.collection...

C 網頁間傳遞引數

有兩種方法 一 呼叫頁面的時候 response.redirect aaa.aspx?param1 123456 m2 789 其中 後面的就是傳遞的字串,如果有多個用 分開,在aaa.aspx頁面讀 request.querystring param1 二 this.session a aaaaa...

WinForm 窗體間傳遞資料

子窗體.cs方法一 在子窗體中自定義乙個建構函式,引數型別是主窗體,當要顯示子窗體的時候,就用這個建構函式來例項化子窗體,然後把this指標傳進去。如下 主窗體.cs public class frmmain form 子窗體.cspublic class frmcontrol form 子窗體,用...