在項(xiàng)目中右鍵點(diǎn)擊添加窗體。在代碼中需要顯示該窗體的地方寫(xiě)入如下代碼:“form2.show()”form2是你窗體的name屬性……
成都創(chuàng)新互聯(lián)是一家專業(yè)提供雄縣企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、HTML5、小程序制作等業(yè)務(wù)。10年已為雄縣眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
建立一個(gè)名為 modGeneral 的模塊并加入下面一行代碼:
Friend DataStuff As DataClass
這一行代碼為我的新類 DataClass 創(chuàng)建了一個(gè)友元變量,使你可以完全訪問(wèn)程序集,對(duì)這個(gè)簡(jiǎn)單例子來(lái)說(shuō),也就是指完整的應(yīng)用程序。然后我添加了下面的代碼到 Form1 的 Load 事件:
DataStuff = New DataClass
Me.txt1stData.DataBindings.Add("Text", DataStuff, "MyData")
Me.txt2ndData.DataBindings.Add("Text", DataStuff, "MoreData")
第一行建立一個(gè) DataClass 新實(shí)例。下面兩行代碼將數(shù)據(jù)綁定到 textbox 控件。對(duì)這個(gè)窗體而言,就這么些操作!
現(xiàn)在,你怎樣讓它們與 Form2 和其它窗體上的數(shù)據(jù)同步呢?將下面兩行加入到 Form 2 的窗體load 事件中去:
Me.txt1stData.DataBindings.Add("Text",DataStuff, "MyData")
Me.txt2ndData.DataBindings.Add("Text",DataStuff, "Moredata")
這個(gè)方法容易確保所有窗體上的幾乎任何類型的數(shù)據(jù)處于同步狀態(tài)。你可以簡(jiǎn)單地將控件綁定到某個(gè)類的相同實(shí)例上,這就行了。
直接添加一個(gè)MID父窗體或在已有窗體的屬性中找到IsMDIContainer屬性,然后設(shè)置為T(mén)rue,然后創(chuàng)建第二個(gè)窗體 ,需要加載子窗體的時(shí)候:
Dim NewMDIChild As New Form2
NewMDIChild.MdiParent = Me
NewMDIChild.Show()
Public?Shared?Sub?CheckMDIChildForm(ByVal?MDIForm?As?Windows.Forms.Form,?ByVal?MDIChildForm?As?Windows.Forms.Form,?ByVal?MDIChildFormName?As?String)
If?MDIForm.MdiChildren.Length??1?Then
'如果沒(méi)有任何一個(gè)MDI子窗體,則創(chuàng)該MDI子窗體的窗體實(shí)例
Dim?MDIChildFrm?As?Windows.Forms.Form?=?MDIChildForm?'?定義MDI子窗體
MDIChildFrm.MdiParent?=?MDIForm?'指定父窗體
MDIChildFrm.Show()?'打開(kāi)窗體
Exit?Sub
Else
Dim?x?As?Integer
Dim?frmyn?As?Boolean
For?x?=?0?To?(MDIForm.MdiChildren.Length)?-?1
Dim?tempChild?As?Windows.Forms.Form?=?CType(MDIForm.MdiChildren(x),?Windows.Forms.Form)
If?tempChild.Name?=?MDIChildFormName?Then
'檢測(cè)到有該MDI子窗體,設(shè)為激活?并退出循環(huán)
frmyn?=?True
tempChild.BringToFront()
Exit?For
Else
frmyn?=?False
End?If
Next
If?Not?frmyn?Then
'在打開(kāi)的窗體中沒(méi)檢測(cè)到則新建
Dim?MDIChildFrm?As?Windows.Forms.Form?=?MDIChildForm?'?定義MDI子窗體
MDIChildFrm.MdiParent?=?MDIForm?'指定父窗體
MDIChildFrm.Show()?'打開(kāi)窗體
End?If
End?If
End?Sub
給你個(gè)例子
新建兩個(gè)窗體Form1,F(xiàn)orm2,每個(gè)窗體上放置一個(gè)按鈕Button1,在Form1上放置ListBox1控件
Form1的Button1的代碼如下
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
Dim?c?As?Control
For?Each?c?In?Controls
If?c.Name.Equals("ListBox1")?Then
c.Parent?=?Form2
Form2.Show()
End?If
Next
End?Sub
Form2的Button1的代碼如下
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
Dim?c?As?Control
For?Each?c?In?Controls
If?c.Name.Equals("ListBox1")?Then
c.Parent?=?Form1
Form1.Show()
End?If
Next
End?Sub
運(yùn)行界面如下
點(diǎn)擊Button1,ListBox1控件,會(huì)在兩個(gè)窗體間移動(dòng)
如果是VB.NET
那么可以直接從一個(gè)父窗體類繼承,例如
Dim
NewFrm
as
New
Form1
NewFrm.Show
這樣可以為一個(gè)窗體創(chuàng)建N個(gè)相同的子類,并且通過(guò)類的方法覆蓋,可以與父類有所不同
NET框架組件太大了 比任何以前所寫(xiě)的封裝功能的庫(kù)都要大 這樣有好處 因?yàn)樗蠓鳒p了建立應(yīng)用程序所需編寫(xiě)的代碼 但是也使我們不可能完全了解該框架組件 但是我們很容易從中找到一些技巧
窗體嵌套
經(jīng)驗(yàn)豐富的Visual Basic開(kāi)發(fā)者知道多文檔界面(MDI)應(yīng)用程序能夠包含子窗體 那些子窗體由MDI父窗體管理 但是如果沒(méi)有MDI的能力你怎樣實(shí)現(xiàn)包含嵌套窗體?例如一個(gè)MDI子窗體也可能需要包含另一個(gè)窗體
有時(shí)能夠使用用戶控件(UserControl)實(shí)現(xiàn)這種功能 但是如果你真的需要把一個(gè)窗體嵌套進(jìn)另一個(gè)窗體 有多種方法可以實(shí)現(xiàn) 窗體衍生自Control類 這意味著它能被放入另一個(gè)窗體的控件集合中 使用如下的邏輯
Dim f As New frmEmbed ()Me Controls Add(f)f Show()
但是很不幸 這段代碼將會(huì)導(dǎo)致一個(gè)運(yùn)行時(shí)(runtime)異常(見(jiàn)圖 )
圖 試圖把一個(gè)窗體添加到另一個(gè)窗體的控件集合時(shí)出現(xiàn)的運(yùn)行時(shí)錯(cuò)誤
為了避免這種異常 該窗體的TopLevel屬性必須設(shè)置為False(見(jiàn)下面的代碼)
Dim f As New frmEmbed () f TopLevel = False Me Controls Add(f) f Show()
圖 顯示的是使用上面的邏輯實(shí)現(xiàn)的一個(gè)窗體嵌入另一個(gè)窗體 嵌入的窗體有一個(gè)標(biāo)題條(它的顏色是未激活的系統(tǒng)顏色) 因此該嵌入窗體能在容器窗體內(nèi)四處拖動(dòng) 在圖 中 該窗體從它的開(kāi)始位置(左上角)拖到了右下角
圖 在容器窗體中有一個(gè)嵌入的窗體 嵌入的窗體能在容器窗體中拖動(dòng)
通常在顯示嵌入的窗體前先設(shè)置它的位置 這只需要簡(jiǎn)單的設(shè)置嵌入窗體的Left和Top屬性 嵌入窗體的位置與容器窗體是相對(duì)的
與MDI子窗體不同 嵌入窗體能覆蓋容器窗體上的控件 圖 顯示了它們的不同
圖 嵌入窗體(左)可以覆蓋容器窗體上的控件 MDI子窗體(右)不能覆蓋MDI父窗體上的控件
在右邊的MDI例子中 沒(méi)有辦法使按鈕隱藏在子窗體的后面 但是在左邊該按鈕被嵌入窗體覆蓋了
當(dāng)窗體第一次被嵌入時(shí) 它將顯示在容器窗體上的已存在的控件的后面 當(dāng)它被點(diǎn)擊時(shí) 它走向前臺(tái)并停留在那兒 這會(huì)打擾用戶 但是能通過(guò)插入下面的代碼防止這種情況發(fā)生
f BringToFront()
嵌入的窗體可以包含其它的嵌入窗體 沒(méi)有實(shí)際的限制 圖 顯示了一個(gè)本身包含嵌入的窗體的嵌入窗體
lishixinzhi/Article/program/net/201311/12398
文章題目:vb.net多窗體教程 vbnet mdi窗體
標(biāo)題鏈接:http://jinyejixie.com/article12/dosshgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、、網(wǎng)站內(nèi)鏈、自適應(yīng)網(wǎng)站、動(dòng)態(tài)網(wǎng)站、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)