你做好拖動(dòng)了嗎?會(huì)拖動(dòng)就好辦,控制邊界就好了,設(shè)定label能移動(dòng)到的最大坐標(biāo)和最小坐標(biāo)。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了白水免費(fèi)建站歡迎大家使用!
我不太明白你要做什么,如果沒(méi)有特殊要求,重寫(xiě)trackbar的部分功能即可
在控件的MouseDown事件中,記錄控件的當(dāng)前位置和鼠標(biāo)坐標(biāo),并設(shè)置一個(gè)標(biāo)志變量表示進(jìn)入拖動(dòng)狀態(tài);在MouseMove事件中,判斷如果當(dāng)前是拖動(dòng)狀態(tài),則根據(jù)鼠標(biāo)的當(dāng)前坐標(biāo)和MouseDown時(shí)的坐標(biāo)計(jì)算出移動(dòng)量,更改控件位置;在MouseUp事件中清除標(biāo)志變量。
很簡(jiǎn)單,通過(guò)WindowsAPI,刪除窗體菜單項(xià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
然后在窗體類中寫(xiě)入過(guò)程:
Private Sub UserForm_Initialize_stopmove() '禁止窗體移動(dòng)
? 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ù)第一個(gè)菜單項(xiàng)
? End If
End Sub
Private Sub UserForm_Initialize_onmove() '恢復(fù)窗體移動(dòng)
? 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ù)值同步,原因時(shí)雖然表面上刪除了菜單項(xiàng),實(shí)則為隱藏了菜單項(xiàng),各個(gè)菜單的索引值并沒(méi)有變,所以0依然代表初始菜單的第一個(gè)菜單項(xiàng),即被刪除的那個(gè)菜單項(xiàng)
? End If
End Sub
然后如果你的窗口菜單是動(dòng)態(tài)變化的,建議聲明常數(shù):
Const MF_BYPOSITION As Integer = H0
然后使用相關(guān)的Windows功能的常數(shù)進(jìn)行刪除菜單。常數(shù)需要自行查看winuser.h頭文件
如果找不到該頭文件,可以看這里:網(wǎng)頁(yè)鏈接
其余信息詳見(jiàn)MSDN:網(wǎng)頁(yè)鏈接
最后說(shuō)一下,不建議前面網(wǎng)友說(shuō)的重寫(xiě)WndProc的方法,因?yàn)檫@樣攔截標(biāo)題欄點(diǎn)擊消息會(huì)導(dǎo)致窗體本身的菜單也無(wú)法顯示出來(lái),有損窗體功能,并且像雙擊左上角圖標(biāo)關(guān)閉窗體這樣的功能也會(huì)跟著攔截消息的操作一起被吞掉。
VB6.0寫(xiě)的,代碼很簡(jiǎn)單,無(wú)意中寫(xiě)成的。應(yīng)該可以參考。不需要任何api函數(shù)。在無(wú)邊框窗體頂部中放入一個(gè)label標(biāo)簽。然后用label的 mouse down 和mouse move事件實(shí)現(xiàn)
Dim a, b As Single
Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
a = X
b = Y
End Sub
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Form1.Move Left + X - a, Top + Y - b
End If
End Sub
網(wǎng)頁(yè)題目:vb.net拖動(dòng)區(qū)域 vb拖動(dòng)控件時(shí)發(fā)出聲音
標(biāo)題鏈接:http://jinyejixie.com/article24/ddccsje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、云服務(wù)器、營(yíng)銷型網(wǎng)站建設(shè)、服務(wù)器托管、網(wǎng)站設(shè)計(jì)公司、搜索引擎優(yōu)化
聲明:本網(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)