ListView绑定TextBox,在ListView中按下方向键,TextBox位置保持不变,如何实现相对移动,即让TextBox跟随ListView中绑定的SubItem移动.代码大致如下:
Private Sub lvw_ItemCheck(Index As Integer, ByVal Item As MSComctlLib.ListItem)
On Error GoTo err
            With Me
                If Len(Item.Text) <> 0 And Item.Checked = True Then
                    .txtOQTY.Move .lvw(Index).ColumnHeaders(5).Left, Item.Top + Item.Height, .lvw(Index).ColumnHeaders(5).Width, Item.Height
                    .txtNQTY.Move .lvw(Index).ColumnHeaders(6).Left, Item.Top + Item.Height, .lvw(Index).ColumnHeaders(6).Width, Item.Height
                Else
                    .txtOQTY.Visible = False
                    .txtNQTY.Visible = False
                End If
            End With
            Exit Sub
End Sub
'写Click是因为当Checked Item被选中时 恢复TextBox显示,以及对应数据考虑
Private Sub lvw_ItemClick(Index As Integer, ByVal Item As MSComctlLib.ListItem)
On Error GoTo err
            With Me
                If Len(Item.Text) <> 0 And Item.Checked = True Then
                    .txtOQTY.Move .lvw(Index).ColumnHeaders(5).Left, Item.Top + Item.Height, .lvw(Index).ColumnHeaders(5).Width, Item.Height
                    .txtNQTY.Move .lvw(Index).ColumnHeaders(6).Left, Item.Top + Item.Height, .lvw(Index).ColumnHeaders(6).Width, Item.Height
                Else
                    .txtOQTY.Visible = False
                    .txtNQTY.Visible = False
                End If
            End With
            Exit Sub
End SubPrivate Sub lvw_KeyUp(Index As Integer, KeyCode As Integer, Shift As Integer)
On Error GoTo err
            With Me
                If (KeyCode = 37) Or (KeyCode = 39) Then
                    If Len(.lvw(Index).SelectedItem.Text) <> 0 And .lvw(Index).SelectedItem.Checked = True Then
                        .txtOQTY.Move .lvw(Index).ColumnHeaders(5).Left, .lvw(Index).SelectedItem.Top + .lvw(Index).SelectedItem.Height, .lvw(Index).ColumnHeaders(5).Width, .lvw(Index).SelectedItem.Height
                        .txtNQTY.Move .lvw(Index).ColumnHeaders(6).Left, .lvw(Index).SelectedItem.Top + .lvw(Index).SelectedItem.Height, .lvw(Index).ColumnHeaders(6).Width, .lvw(Index).SelectedItem.Height
                    End If
                End If
            End With
            Exit Sub
End Sub
谢谢各位帮忙

解决方案 »

  1.   


    就是ListView下面有多个列时,水平滚动条就出来了.而我的TextBox绑定到了一个列上.当TextBox显示时,我按下左右方向键,水平滚动条会左右移动,看着感觉TextBox在跟随移动.我就是想让TextBox保持绑定的位置.各位帅哥美女帮帮忙,谢谢
      

  2.   

    Option ExplicitPrivate Const LVM_FIRST As Long = &H1000
    Private Const LVM_GETSUBITEMRECT As Long = (LVM_FIRST + 56)
    Private Const LVIR_BOUNDS As Long = 0
    Private Const LVIR_ICON As Long = 1
    Private Const LVIR_LABEL As Long = 2Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End TypePrivate Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
            (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
             ByRef lParam As Any) As LongPrivate Declare Function MapWindowPoints Lib "user32.dll" ( _
         ByVal hwndFrom As Long, _
         ByVal hwndTo As Long, _
         ByRef lppt As Any, _
         ByVal cPoints As Long) As LongPrivate Declare Function MoveWindow Lib "user32.dll" ( _
         ByVal hwnd As Long, _
         ByVal X As Long, _
         ByVal Y As Long, _
         ByVal nWidth As Long, _
         ByVal nHeight As Long, _
         ByVal bRepaint As Long) As LongPrivate Sub Command1_Click()
        Dim rc As RECT, i As Long
        
        For i = 5 To 6
            rc.Top = i - 1
            rc.Left = LVIR_BOUNDS
            SendMessage ListView1.hwnd, LVM_GETSUBITEMRECT, ListView1.SelectedItem.Index - 1, rc
            MapWindowPoints ListView1.hwnd, Me.hwnd, rc, 2
            MoveWindow IIf(i = 5, txtOQTY.hwnd, txtNQTY.hwnd), _
                       rc.Left, rc.Top, rc.Right - rc.Left, rc.Bottom - rc.Top, 1
        Next
    End Sub
      

  3.   

    你将水平滚动条拉在不同的位置,再执行一下按钮的 Command1 点击。
    给出的例子是如何将 TextBox 移动到正确的位置,你自己改为在不同的事件中调用。
      

  4.   

    换控件实现了,楼上给的代码移动的位置是错误的,由于急于实现功能只好先换控件了,回头有时间再看看吧.谢谢Tiger_Zhao
      

  5.   

    你是用 Report 视图显示的吧。
    我的代码经过测试完全可用的,只要保证 ListView 和两个 TextBox 属于同一个 Container。
      

  6.   

    你是用 Report 视图显示的吧。
    我的代码经过测试完全可用的,只要保证 ListView 和两个 TextBox 属于同一个 Container。
      

  7.   

    嗯,是Report 视图显示的但是container好像是TextBox放在lvw上了 - - 看来问题出在了这里.