'''一个自制的组合框(一个文本框加一个按钮),当点击下拉按钮时显示一个ListView控件,我把这个listview当下拉框
    ''里面的列头数目和名称便于自定义,
    ''问题,怎样改变listview的宽度,用户可以自己拖大拖小
    ''难点拖大拖小时不影响文本框右面的其它控件,如果一个文本框\按钮\listview都在一个界面时
    ''拖宽后会盖住文件框右面的其它控件
    ''我现在的解决办法是文本框\按钮放在 UserControl 上,,listview放在一个窗体上并充满窗体
    ''点下拉按钮时显示窗体,

解决方案 »

  1.   

    Option ExplicitPrivate Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End Type
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As LongEvent ItemClick(n As Node)Private Sub ShowList()
        Dim rt As RECT
        GetWindowRect UserControl.hwnd, rt
        TreeView1.Move rt.Left * Screen.TwipsPerPixelX, rt.Bottom * Screen.TwipsPerPixelY
        SetParent TreeView1.hwnd, 0
        TreeView1.Visible = True
    End SubPrivate Sub HideList()
        SetParent TreeView1.hwnd, UserControl.hwnd
        TreeView1.Visible = False
    End SubPrivate Sub Command1_Click()
        If TreeView1.Visible Then
            HideList
        Else
            ShowList
        End If
    End SubPrivate Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
        HideList
        RaiseEvent ItemClick(Node)
    End SubPrivate Sub UserControl_ExitFocus()
        If TreeView1.Visible Then HideList
    End SubPrivate Sub UserControl_Resize()
        On Error Resume Next
        Command1.Move UserControl.ScaleWidth - Command1.Width, 0, Command1.Width, UserControl.ScaleHeight
        Text1.Move 0, 0, Command1.Left, UserControl.ScaleHeight
        TreeView1.Width = UserControl.ScaleWidth
    End Sub
      

  2.   

    Modest(塞北雪貂)·(偶最欣赏楼主的分)
    我主要是让TreeView1能拉宽,
    而且不能让控件当住 text 右面的其它控件,
    有难度的呢
      

  3.   

    我的做法是把TreeView1 or 其它类似控件放到另一窗体上, 显示时SetParent 到用户窗体上
    但位置和text 的位置不好控制,而是跑到其它地方