NET框架組件太大了 比任何以前所寫的封裝功能的庫都要大 這樣有好處 因?yàn)樗蠓鳒p了建立應(yīng)用程序所需編寫的代碼 但是也使我們不可能完全了解該框架組件 但是我們很容易從中找到一些技巧
創(chuàng)新互聯(lián)專注于龍圩網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供龍圩營銷型網(wǎng)站建設(shè),龍圩網(wǎng)站制作、龍圩網(wǎng)頁設(shè)計(jì)、龍圩網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造龍圩網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供龍圩網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
窗體嵌套
經(jīng)驗(yàn)豐富的Visual Basic開發(fā)者知道多文檔界面(MDI)應(yīng)用程序能夠包含子窗體 那些子窗體由MDI父窗體管理 但是如果沒有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)異常(見圖 )
圖 試圖把一個(gè)窗體添加到另一個(gè)窗體的控件集合時(shí)出現(xiàn)的運(yùn)行時(shí)錯(cuò)誤
為了避免這種異常 該窗體的TopLevel屬性必須設(shè)置為False(見下面的代碼)
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) 在圖 中 該窗體從它的開始位置(左上角)拖到了右下角
圖 在容器窗體中有一個(gè)嵌入的窗體 嵌入的窗體能在容器窗體中拖動(dòng)
通常在顯示嵌入的窗體前先設(shè)置它的位置 這只需要簡單的設(shè)置嵌入窗體的Left和Top屬性 嵌入窗體的位置與容器窗體是相對(duì)的
與MDI子窗體不同 嵌入窗體能覆蓋容器窗體上的控件 圖 顯示了它們的不同
圖 嵌入窗體(左)可以覆蓋容器窗體上的控件 MDI子窗體(右)不能覆蓋MDI父窗體上的控件
在右邊的MDI例子中 沒有辦法使按鈕隱藏在子窗體的后面 但是在左邊該按鈕被嵌入窗體覆蓋了
當(dāng)窗體第一次被嵌入時(shí) 它將顯示在容器窗體上的已存在的控件的后面 當(dāng)它被點(diǎn)擊時(shí) 它走向前臺(tái)并停留在那兒 這會(huì)打擾用戶 但是能通過插入下面的代碼防止這種情況發(fā)生
f BringToFront()
嵌入的窗體可以包含其它的嵌入窗體 沒有實(shí)際的限制 圖 顯示了一個(gè)本身包含嵌入的窗體的嵌入窗體
lishixinzhi/Article/program/net/201311/12398
直接添加一個(gè)MID父窗體或在已有窗體的屬性中找到IsMDIContainer屬性,然后設(shè)置為True,然后創(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
'如果沒有任何一個(gè)MDI子窗體,則創(chuàng)該MDI子窗體的窗體實(shí)例
Dim?MDIChildFrm?As?Windows.Forms.Form?=?MDIChildForm?'?定義MDI子窗體
MDIChildFrm.MdiParent?=?MDIForm?'指定父窗體
MDIChildFrm.Show()?'打開窗體
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
'在打開的窗體中沒檢測(cè)到則新建
Dim?MDIChildFrm?As?Windows.Forms.Form?=?MDIChildForm?'?定義MDI子窗體
MDIChildFrm.MdiParent?=?MDIForm?'指定父窗體
MDIChildFrm.Show()?'打開窗體
End?If
End?If
End?Sub
加以一個(gè)panel用來顯示應(yīng)用程序的,就是放你那個(gè)easycap的,代碼如下
Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Int32, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Int32
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Int32, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Int32) As Int32
Private Const WM_SYSCOMMAND As Int32 = H112
Private Const SC_MAXIMIZE As Int32 = HF030
Private Const SC_MINIMIZE As Int32 = HF020
Private Const SC_RESTORE As Int32 = HF120
Public Const SW_HIDE = 0
Public Const SW_SHOW = 5
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Int32, ByVal nCmdShow As Int32) As Int32
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ShellExecute(Me.Panel1.Handle, "open", "c:\windows\system32\cmd.exe", Nothing, ".", SW_HIDE)
System.Threading.Thread.Sleep(50)
Dim h As IntPtr = FindWindow(Nothing, "c:\windows\system32\cmd.exe")
ShowWindow(h, SW_HIDE)
SetParent(h, Me.Panel1.Handle) '嵌到panel1內(nèi)
SendMessage(h, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
End Sub
把其中的c:\windows\system32\cmd.exe換成你要嵌入的應(yīng)用程序
分享題目:vb.net內(nèi)嵌窗體 vb中窗體是什么意思
網(wǎng)站路徑:http://jinyejixie.com/article22/dophccc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、小程序開發(fā)、網(wǎng)站內(nèi)鏈、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)