你做好拖動了嗎?會拖動就好辦,控制邊界就好了,設定label能移動到的最大坐標和最小坐標。
網站建設哪家好,找創新互聯建站!專注于網頁設計、網站建設、微信開發、微信小程序開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了白水免費建站歡迎大家使用!
我不太明白你要做什么,如果沒有特殊要求,重寫trackbar的部分功能即可
在控件的MouseDown事件中,記錄控件的當前位置和鼠標坐標,并設置一個標志變量表示進入拖動狀態;在MouseMove事件中,判斷如果當前是拖動狀態,則根據鼠標的當前坐標和MouseDown時的坐標計算出移動量,更改控件位置;在MouseUp事件中清除標志變量。
很簡單,通過WindowsAPI,刪除窗體菜單項就行了
首先在窗體類中聲明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參數常量:
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代表菜單中從上往下數第一個菜單項
? 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與禁止代碼中的數值同步,原因時雖然表面上刪除了菜單項,實則為隱藏了菜單項,各個菜單的索引值并沒有變,所以0依然代表初始菜單的第一個菜單項,即被刪除的那個菜單項
? End If
End Sub
然后如果你的窗口菜單是動態變化的,建議聲明常數:
Const MF_BYPOSITION As Integer = H0
然后使用相關的Windows功能的常數進行刪除菜單。常數需要自行查看winuser.h頭文件
如果找不到該頭文件,可以看這里:網頁鏈接
其余信息詳見MSDN:網頁鏈接
最后說一下,不建議前面網友說的重寫WndProc的方法,因為這樣攔截標題欄點擊消息會導致窗體本身的菜單也無法顯示出來,有損窗體功能,并且像雙擊左上角圖標關閉窗體這樣的功能也會跟著攔截消息的操作一起被吞掉。
VB6.0寫的,代碼很簡單,無意中寫成的。應該可以參考。不需要任何api函數。在無邊框窗體頂部中放入一個label標簽。然后用label的 mouse down 和mouse move事件實現
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
網頁題目:vb.net拖動區域 vb拖動控件時發出聲音
標題鏈接:http://vcdvsql.cn/article24/ddccsje.html
成都網站建設公司_創新互聯,為您提供網頁設計公司、云服務器、營銷型網站建設、服務器托管、網站設計公司、搜索引擎優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯