国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.NET中窗體間相互訪問的幾種方式

2024-07-10 13:05:25
字體:
供稿:網(wǎng)友
在我們的程序中,窗體之間經(jīng)常要相互訪問彼此的成員,調(diào)用彼此的方法,或者激發(fā)彼此的事件。下面就我的經(jīng)驗,簡單談談在.net中窗體間相互訪問的幾種方式。

以下給出了c#.net和vb.net的示例代碼。用form1、form2類分別表示主、從窗體。

 1、內(nèi)部成員訪問法,適合于主窗體訪問它所創(chuàng)建的從窗體對象中的成員。只需將從窗體允許主窗體訪問的那些成員加上internal或friend限定符。例如:

c#主

private void showform2info() {

    form2 f2 = new form2();

    f2.show();

    messagebox.show(f2.myname);

}

c#從

internal string myname = "a form2 object";

vb主

private sub showform2info()

    dim f2 as new form2

    f2.show()

    msgbox(f2.myname)

end sub

vb從

friend myname as string = "a form2 object"

 

2、將以上方法反過來用,讓從窗體訪問創(chuàng)建它的主窗體中的成員,需要增加一個步驟:在從窗體的構(gòu)造函數(shù)中傳入一個主窗體的引用,以便找到創(chuàng)建它的主窗體(新建的構(gòu)造函數(shù)中不要忘了調(diào)用initializecomponent()函數(shù))。主窗體創(chuàng)建從窗體對象時傳入自身的引用。例如:

c#主

private void showform2() {

    form2 f2 = new form2(this);

    f2.show();

}

 

internal string myname = "a form1 object";

c#從

private form1 f1;

public form2(form1 _f1) {

    initializecomponent();

    f1 = _f1;

}

 

private void showform1info() {

    messagebox.show(f1.myname);

}

vb主

private sub showform2()

    dim f2 as new form2(me)

    f2.show()

end sub

 

friend myname as string = "a form1 object"

vb從

private f1 as form1

public sub new(byval _f1 as form1)

    mybase.new()

    initializecomponent()

    f1 = _f1

end sub

 

private sub showform1info()

    msgbox(f1.myname)

end sub

 

3、從窗體訪問主窗體中的成員,如果主窗體只有一個實例,或者被訪問對象是全局性的,可以將主窗體中要求訪問的成員設(shè)置為靜態(tài)的,加上static或shared限定符即可:

c#主

private void showform2() {

    form2 f2 = new form2();

    f2.show();

}

 

internal static string myname = "a form1 object";

c#從

private void showform1info() {

    messagebox.show(form1.myname);

}

vb主

private sub showform2()

    dim f2 as new form2()

    f2.show()

end sub

 

friend shared myname as string = "a form1 object"

vb從

private sub showform1info()

    msgbox(form1.myname)

end sub

 

4、還可以運用.net的事件委托機制,實現(xiàn)更加靈活的相互調(diào)用。下例是從窗體激發(fā)主窗體的事件。事件委托機制的功能事實上遠比此例強大,大家可以找書看看它的詳細用法。

c#主

private void showform2() {

    form2 f2 = new form2();

    f2.show();

    f2.sendmessage += new form2.delegateofsendmessage(showmessage);

}

 

private void showmessage(string str) {

    messagebox.show(str);

}

c#從

public delegate void delegateofsendmessage(string str);

public event delegateofsendmessage sendmessage;

 

private void send() {

    sendmessage("a message from form2");

}

vb主

private sub showform2()

    dim f2 as new form2

    f2.show()

    addhandler f2.sendmessage, addressof showmessage

end sub

 

private sub showmessage(byval str as string)

    msgbox(str)

end sub

vb從

public delegate sub delegateofsendmessage(byval str as string)

public event sendmessage as delegateofsendmessage

 

private sub send()

    raiseevent sendmessage("a message from form2")

end sub

 

5、同樣的道理,結(jié)合方法2和方法4可以實現(xiàn)主窗體激發(fā)從窗體的事件,這個請讀者自己實驗。當然這樣一來代碼會顯得比較亂。一個較好的解決方法是將事件封裝入一個接口,同時在事件的發(fā)布方和訂閱方實現(xiàn)。這種技術(shù)在.net remoting遠程對象操作技術(shù)中尤為重要,有一篇不錯的文章給大家參考:《remoting事件處理全接觸》(http://www.cnblogs.com/wayfarer/articles/75213.html)

 

6、習慣了vb6中全局變量的朋友可能覺得.net中不支持全局變量對于窗體間的交互很不方便,那么再請大家參考這篇文章:《.net窗體之間的交互》(http://blog.csdn.net/warsgrobe/archive/2005/07/29/438013.aspx),里面敘述了用vb.net模擬全局變量的方法。

 

ok,就說到這里。.net是一個強大而靈活的體系,只要肯動腦筋,一定能發(fā)現(xiàn)不少這樣的技巧。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 广河县| 阳新县| 政和县| 黑水县| 图木舒克市| 林周县| 黎城县| 鞍山市| 常熟市| 新宁县| 卢湾区| 融水| 普格县| 依安县| 靖边县| 额尔古纳市| 新巴尔虎左旗| 齐齐哈尔市| 商南县| 海盐县| 射阳县| 龙岩市| 静安区| 太保市| 玛沁县| 余庆县| 井冈山市| 呼伦贝尔市| 东山县| 内丘县| 南川市| 萝北县| 新兴县| 绥芬河市| 绥中县| 当涂县| 米林县| 普格县| 舟山市| 康乐县| 瑞昌市|