回 帖 发 新 帖 刷新版面

主题:求“简化”移动窗体上控件的代码(跟+30)

各位高人:
  我的问题是这样的:
   如果窗口上有一个picture1控件,要实现按住鼠标拖动控件,有如下代码:
     Dim mouseX As Integer
Dim mouseY As Integer
Dim moveX As Integer
Dim moveY As Integer
Dim down As Boolean

Private Sub Form_Load()

End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    down = True
    mouseX = X
    mouseY = Y
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If down Then
    moveX = Picture1.Left - mouseX + X
    moveY = Picture1.Top - mouseY + Y
    Picture1.Move moveX, moveY
End If
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    down = False
End Sub

 
     可是现在,我的窗体上有20个picturebox,要套用上面的代码,需要做20次修改,太麻烦也太臃肿了!!不是编程人的风格![color=FF00FF]有没有利用“控件数组”简化代码的办法?[/color]

先谢谢了!!!

回复列表 (共5个回复)

沙发

你自己都说了,利用“控件数组”啊。
改动很小,就是把Picture1.Move改成Picture1(Index).Move

板凳


[color=FF00FF][size=5]按你的说法试验了,根本不行!!!!!!!!!!!![/size][/color]

3 楼

一楼说的没错啊,具体代码如下:

Private Sub Pic1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 And Shift = 0 Then Pic1(Index).Move Pic1(Index).Left + X, Pic1(Index).Top + Y
End Sub

4 楼


呵呵,不好意思,我把Index As Integer丢了。

5 楼

Option Explicit

Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_SYSCOMMAND = &H112
Private Const SC_MOVE = &HF010&
Private Const HTCAPTION = 2

Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    ReleaseCapture
    SendMessage Command1.hWnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0
End Sub

我来回复

您尚未登录,请登录后再回复。点此登录或注册