当前位置:编程学习 > VB >>

关于vb控件拖动!!!!!求教 在线等 急急急!谢谢

我采用如下方法 在form上拖动1个控件
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 Declare Function ReleaseCapture Lib "user32" () As Long
    
  Private Const SC_MOVE = &HF010&
  Private Const WM_SYSCOMMAND = &H112
  Private Const HTCAPTION = 2
  
   ReleaseCapture
   Call SendMessage(Command1.hwnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0)

请问一下 我现在要实现的是拖动控件1 让控件2跟随移动 有办法吗?
谢谢高人!!! --------------------编程问答-------------------- 可以结合为组。
--------------------编程问答-------------------- 能不能说详细点 或者给个代码  万分感谢  --------------------编程问答-------------------- 直接用控件的move方法就可以了。

不必调用API的 --------------------编程问答-------------------- 抱歉,没仔细看。

你要拖动的话,用drag and drop。也不需要用API的。

具体可查MSDN的VB用户手册里关于拖放那一章。 --------------------编程问答-------------------- 看看drag and drop这方面 --------------------编程问答-------------------- 把要拖放的控件放到picture里,如果不想让用户看出来看到picture里,可以将picture的边框设置为none

然后拖动picture控件即可。


天狼工作室 http://www.j2soft.cn/ --------------------编程问答--------------------

Option Explicit

Private bMoveing As Boolean

Private Sub Init_Ctrl()
        With tvw
            .Nodes.Add , tvwFirst, "first", "第一节点"
        End With
        With lvw
            .GridLines = True
            .View = lvwReport
            .ColumnHeaders.Add 1, "first", "第一列", .Width / 4
            .ColumnHeaders.Add 2, "second", "第二列", .Width / 4
            .ColumnHeaders.Add 3, "third", "第三列", .Width / 4
            .ColumnHeaders.Add 4, "forth", "第四列", .Width / 4
        End With
        
        With pbxV
            .Visible = False
        End With
End Sub

Private Sub Form_Load()
        Call Init_Ctrl
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
        With Screen
            .MousePointer = 0
        End With
End Sub

Private Sub Form_Resize()
        With Me
            If .ScaleHeight = 0 Or .ScaleWidth = 0 Then Exit Sub
        End With
        
        With tvw
            .Top = 60
            .Left = 60
            .Height = Me.ScaleHeight - 120
        End With
        
        With imgSpliter
            .Left = tvw.Left + tvw.Width
            .Top = tvw.Top
            .Width = 60
            .Height = tvw.Height
        End With
        
        With lvw
            .Left = tvw.Left + tvw.Width + 60
            .Top = tvw.Top
            .Height = tvw.Height
        End With
        
        With pbxV
            .Top = tvw.Top
            .Height = tvw.Height
            .Left = imgSpliter.Left + imgSpliter.Width
        End With
End Sub

Private Sub imgSpliter_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
        With imgSpliter
          pbxV.Move .Left, .Top, .Width - 20, .Height - 20
        End With
        pbxV.Visible = True
        bMoveing = True
End Sub

Private Sub imgSpliter_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
        Screen.MousePointer = 9
        With imgSpliter
          pbxV.Move .Left + .Width + x, .Top, .Width - 20, .Height - 20
        End With
End Sub

Private Sub imgSpliter_MouseUp(Button As Integer, Shift As Integer, x As Single, Y As Single)
        With pbxV
            .Visible = False
        End With
        Call Size_Ctrl
End Sub

Private Sub lvw_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
        Screen.MousePointer = 0
End Sub

Private Sub tvw_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
        Screen.MousePointer = 0
End Sub

Private Sub Size_Ctrl()
        With tvw
            .Width = pbxV.Left - .Left
        End With
        
        With imgSpliter
            .Left = tvw.Left + tvw.Width
        End With
        
        With lvw
            .Left = pbxV.Left + pbxV.Width
        End With
End Sub

'窗体中放置一个TreeView名为tvw,一个ListView名为lvw,一个PictureBox名为pbxV,一个Image名为imgSpliter

这段代码,未经严格测试,只是本人闲暇时间写的,楼主可以大概看下.

另外VB IDE本身是有示例的. --------------------编程问答--------------------
引用 6 楼 cuizm 的回复:
把要拖放的控件放到picture里,如果不想让用户看出来看到picture里,可以将picture的边框设置为none

然后拖动picture控件即可。


天狼工作室http://www.j2soft.cn/


对,可以放在picture里 --------------------编程问答-------------------- 我在7楼的代码可能不符合你的拖动,那段属于拉伸. --------------------编程问答-------------------- 控件有专门的拖到事件,你可以在被拖动的控件的事件中修改另一个控件的Left和Top属性。即可实现拖动一个控件,另一个控件也跟着移动的效果。 --------------------编程问答--------------------
Option Explicit
    Dim cX As Long
    Dim cY As Long

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
    Source.Move X - cX, Y - cY
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Picture1.Drag 1
    cX = X: cY = Y
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Picture1.Drag 2
End Sub
补充:VB ,  控件
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,