vb點虐 中窗體類 vbs窗體

VB.NET怎么可以限制窗體不能被鼠標隨便拖動位置

很簡單,通過WindowsAPI,刪除窗體菜單項就行了

公司主營業(yè)務:網(wǎng)站制作、網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出磴口免費做網(wǎng)站回饋大家。

首先在窗體類中聲明API:

Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr

Declare Function RemoveMenu Lib "user32" (ByVal lngHmenu As IntPtr, ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer

其次聲明API參數(shù)常量:

Const MF_BYPOSITION As Integer = H400

然后在窗體類中寫入過程:

Private Sub UserForm_Initialize_stopmove() '禁止窗體移動

? Dim lngHwnd As IntPtr

? Dim lngHmenu As IntPtr

? lngHwnd = Me.Handle

? If lngHwnd 0 Then

? ? ? lngHmenu = GetSystemMenu(lngHwnd, False)

? ? ? RemoveMenu(lngHmenu, 0, MF_BYPOSITION) '這里的0代表菜單中從上往下數(shù)第一個菜單項

? End If

End Sub

Private Sub UserForm_Initialize_onmove() '恢復窗體移動

? Dim lngHwnd As IntPtr

? Dim lngHmenu As IntPtr

? lngHwnd = Me.Handle

? If lngHwnd 0 Then

? ? ? lngHmenu = GetSystemMenu(lngHwnd, True)

RemoveMenu(lngHmenu, 0, MF_BYPOSITION) '這里的0與禁止代碼中的數(shù)值同步,原因時雖然表面上刪除了菜單項,實則為隱藏了菜單項,各個菜單的索引值并沒有變,所以0依然代表初始菜單的第一個菜單項,即被刪除的那個菜單項

? End If

End Sub

然后如果你的窗口菜單是動態(tài)變化的,建議聲明常數(shù):

Const MF_BYPOSITION As Integer = H0

然后使用相關的Windows功能的常數(shù)進行刪除菜單。常數(shù)需要自行查看winuser.h頭文件

如果找不到該頭文件,可以看這里:網(wǎng)頁鏈接

其余信息詳見MSDN:網(wǎng)頁鏈接

最后說一下,不建議前面網(wǎng)友說的重寫WndProc的方法,因為這樣攔截標題欄點擊消息會導致窗體本身的菜單也無法顯示出來,有損窗體功能,并且像雙擊左上角圖標關閉窗體這樣的功能也會跟著攔截消息的操作一起被吞掉。

使用VB.NET的五個技巧之窗體嵌套

NET框架組件太大了 比任何以前所寫的封裝功能的庫都要大 這樣有好處 因為它大幅削減了建立應用程序所需編寫的代碼 但是也使我們不可能完全了解該框架組件 但是我們很容易從中找到一些技巧

窗體嵌套

經(jīng)驗豐富的Visual Basic開發(fā)者知道多文檔界面(MDI)應用程序能夠包含子窗體 那些子窗體由MDI父窗體管理 但是如果沒有MDI的能力你怎樣實現(xiàn)包含嵌套窗體?例如一個MDI子窗體也可能需要包含另一個窗體

有時能夠使用用戶控件(UserControl)實現(xiàn)這種功能 但是如果你真的需要把一個窗體嵌套進另一個窗體 有多種方法可以實現(xiàn) 窗體衍生自Control類 這意味著它能被放入另一個窗體的控件集合中 使用如下的邏輯

Dim f As New frmEmbed ()Me Controls Add(f)f Show()

但是很不幸 這段代碼將會導致一個運行時(runtime)異常(見圖 )

圖 試圖把一個窗體添加到另一個窗體的控件集合時出現(xiàn)的運行時錯誤

為了避免這種異常 該窗體的TopLevel屬性必須設置為False(見下面的代碼)

Dim f As New frmEmbed () f TopLevel = False Me Controls Add(f) f Show()

圖 顯示的是使用上面的邏輯實現(xiàn)的一個窗體嵌入另一個窗體 嵌入的窗體有一個標題條(它的顏色是未激活的系統(tǒng)顏色) 因此該嵌入窗體能在容器窗體內四處拖動 在圖 中 該窗體從它的開始位置(左上角)拖到了右下角

圖 在容器窗體中有一個嵌入的窗體 嵌入的窗體能在容器窗體中拖動

通常在顯示嵌入的窗體前先設置它的位置 這只需要簡單的設置嵌入窗體的Left和Top屬性 嵌入窗體的位置與容器窗體是相對的

與MDI子窗體不同 嵌入窗體能覆蓋容器窗體上的控件 圖 顯示了它們的不同

圖 嵌入窗體(左)可以覆蓋容器窗體上的控件 MDI子窗體(右)不能覆蓋MDI父窗體上的控件

在右邊的MDI例子中 沒有辦法使按鈕隱藏在子窗體的后面 但是在左邊該按鈕被嵌入窗體覆蓋了

當窗體第一次被嵌入時 它將顯示在容器窗體上的已存在的控件的后面 當它被點擊時 它走向前臺并停留在那兒 這會打擾用戶 但是能通過插入下面的代碼防止這種情況發(fā)生

f BringToFront()

嵌入的窗體可以包含其它的嵌入窗體 沒有實際的限制 圖 顯示了一個本身包含嵌入的窗體的嵌入窗體

lishixinzhi/Article/program/net/201311/12398

VB.NET怎么調用別的窗體!

在 VB.NET 中,你編好的窗體僅僅是一個類而已,不像 VB6,窗體本身就是一個對象。就是說,如果要顯示窗體,你需要將你編的窗體類實例化對一個對象,然后再調用這個對象:

Dim frm As New frmDlg ' 將 frmDlg 窗體類實例化為對象 frmfrm.Show() ' 將實例化的對象顯示出來

如何給VB.NET窗體添加子窗體?

直接添加一個MID父窗體或在已有窗體的屬性中找到IsMDIContainer屬性,然后設置為True,然后創(chuàng)建第二個窗體 ,需要加載子窗體的時候:

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

'如果沒有任何一個MDI子窗體,則創(chuàng)該MDI子窗體的窗體實例

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

'檢測到有該MDI子窗體,設為激活?并退出循環(huán)

frmyn?=?True

tempChild.BringToFront()

Exit?For

Else

frmyn?=?False

End?If

Next

If?Not?frmyn?Then

'在打開的窗體中沒檢測到則新建

Dim?MDIChildFrm?As?Windows.Forms.Form?=?MDIChildForm?'?定義MDI子窗體

MDIChildFrm.MdiParent?=?MDIForm?'指定父窗體

MDIChildFrm.Show()?'打開窗體

End?If

End?If

End?Sub

分享文章:vb點虐 中窗體類 vbs窗體
分享網(wǎng)址:http://muchs.cn/article18/ddcjddp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供服務器托管、外貿(mào)建站、全網(wǎng)營銷推廣、軟件開發(fā)自適應網(wǎng)站、虛擬主機

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化