主窗體和子窗體之間如何相互操作對方的控制項

2021-08-28 15:46:20 字數 3157 閱讀 7611

很多人都苦惱於如何在子窗體中操作主窗體上的控制項,或者在主窗體中操作子窗體上的控制項。相比較而言,後面稍微簡單一些,只要在主窗體中建立子窗體的時候,保留所建立子窗體物件即可。

下面重點介紹前一種,目前常見的有兩種方法,基本上大同小異:

第一種,在主窗體類中定義乙個靜態成員,來儲存當前主窗體物件,例如:

public

static yourmainwindow pcurrentwin = null;

然後在主窗體建構函式中,給靜態成員初始化,如下:

pcurrentwin = this;

那麼在子窗體中呼叫父窗體,可以通過「主窗體類名

.pcurrentwin

」來操作當前的主窗體。

第二種,是在子窗體中定義乙個私有成員,來儲存當前主窗體物件,例如:

private yourmainwindow pparentwin = null;

然後在子窗體建構函式中,加一引數,如下:

public yourchildwindow( yourmainwindow winmain )

在主窗體建立子窗體的時候,要把

this

作為引數來構造子窗體,這樣在子窗體中呼叫父窗體,可以直接用「

this.pparentwin

」就可以了

不過以上所作的,只是讓你能夠訪問當前主窗體物件,那麼如何操作控制項,很多人直接修改控制項的成員訪問符,即把「

private

」改為「

public

」,我覺得這樣破壞了本身類的封裝,所以我比較喜歡的做法是增加公有屬性或方法來供呼叫,例如:

public

string buttontext

set }

public void button_click()

下面僅供參考:

關於如何操作其他窗體的控制項或變數的方法!

其實解決的方法有很多,在這裡只做簡單的總結。

1.定義全域性變數

其實這個方法比較簡單也很好理解,我們只要在乙個

module

裡面定義了兩個全域性變數就可以了。

例如:public frm1 as new form1()

public frm2 as new form2()

這樣,我們無論在**想訪問就很容易了。但是,這樣做會耗費比較多的系統資源。一般來說不要使用全域性變數。

2.使用

shared

字首使用了

shared

定義的字段(變數)或者屬性可以被其他窗體呼叫。

例如:(假設有窗體

form1

和form2 )在

form1

中寫入:

public

shared m_add as

string

『這樣我們在form1的任何地方都可以更改m_add的值

private

sub form1_load(byval sender as system.object, byval e as system.eventargs) handles

mybase.load

m_add = "111"

endsub

在form2中寫入:

private

sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click

messagebox.show(form1.m_add)

『顯然我們可以得到form1的這個變數了

endsub

注意:使用

shared

時,不用定義例項,被定義成

shared

的變數或屬性在所有的例項中都是乙個值。就象上面的例子中使用

form1.m_add

一樣。所以如果是開啟很多的同乙個窗體的例項時,該值不變化,可以用來記錄開啟的例項數量。 3.

這種方法傳遞乙個窗體例項過去,這樣就可以獲得該例項的變數與屬性了。當然也可以對他們進行操作。

例如:在form1中

dim frm as

new form2(me)

frm.show()

在form2中:

dim m_parent as form1

public

subnew(byval sender as

object)

mybase.new()

該呼叫是 windows 窗體設計器所必需的。

initializecomponent()

在 initializecomponent() 呼叫之後新增任何初始化

m_parent=ctype(sender,form1)

『或者m_parent=directcast(sender,form1)

endsub

private

sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click

m_parent.textbox1.text = "1111"

endsub

4.設定乙個屬性來控制訪問

這種方式在new 乙個窗體後,show他出來前設定它的乙個公共屬性,這個屬性就是本窗體的例項。當然也可以不是乙個屬性而是乙個公共的字段。

如:在form1中:

dim newform as new form2()

newform.setparentform = me

newform.show()

在form2中:

dim m_parentform as form1

public property setparentform as form1

get

return m_parentform

end get

set (byval value as form1)

m_parentform = value

end set

注意:如果是mdi型別的話,可以通過子窗體的parentform屬性獲得相應的主窗體例項,這樣就可以操作主窗體的控制項或屬性了。

主窗體和子窗體之間如何相互操作對方的控制項

很多人都苦惱於如何在子窗體中操作主窗體上的控制項,或者在主窗體中操作子窗體上的控制項。相比較而言,後面稍微簡單一些,只要在主窗體中建立子窗體的時候,保留所建立子窗體物件即可。下面重點介紹前一種,目前常見的有兩種方法,基本上大同小異 第一種,在主窗體類中定義乙個靜態成員,來儲存當前主窗體物件,例如 p...

主窗體和子窗體之間如何相互操作對方的控制項

很多人都苦惱於如何在子窗體中操作主窗體上的控制項,或者在主窗體中操作子窗體上的控制項。相比較而言,後面稍微簡單一些,只要在主窗體中建立子窗體的時候,保留所建立子窗體物件即可。下面重點介紹前一種,目前常見的有兩種方法,基本上大同小異 第一種,在主窗體類中定義乙個靜態成員,來儲存當前主窗體物件,例如 p...

主窗體和子窗體之間如何相互操作對方的控制項

很多人都苦惱於如何在子窗體中操作主窗體上的控制項,或者在主窗體中操作子窗體上的控制項。相比較而言,後面稍微簡單一些,只要在主窗體中建立子窗體的時候,保留所建立子窗體物件即可。下面重點介紹前一種,目前常見的有兩種方法,基本上大同小異 第一種,在主窗體類中定義乙個靜態成員,來儲存當前主窗體物件,例如 p...