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