Member 11856456 Ответов: 0

Как установить текстовое поле в listview, чтобы оно было привязано


На данный момент я могу поместить текстовое поле в listview и получить его значение. Однако, как только я начинаю перемещать вертикальную полосу прокрутки, текстовое поле не остается в нужном пространстве подэлементов. Я видел пример с datagridview, который я пытался использовать с listview, но то же самое происходит, когда я использую полосу прокрутки.

вот код, который я использую:

Private Sub ListView1_Click(sender As Object, e As EventArgs) Handles ListView1.MouseClick

        If Not txb Is Nothing Then
            RemoveHandler txb.Leave, AddressOf txb_Leave
            ListView1.Controls.Remove(txb)
            txb.Hide()
            txb = Nothing
        End If

        txb = New TextBox()

        txb.Width = 217
        txb.Text = Me.ListView1.SelectedItems(0).SubItems(1).Text
        '  txb.Location = New Point(ListView1.SelectedItems.Item(0).SubItems.Item(1).Bounds.X, ListView1.SelectedItems.Item(0).SubItems.Item(1).Bounds.Y - 1)
        txb.Tag = Me.ListView1.SelectedItems(0)

        AddHandler txb.Leave, AddressOf txb_Leave

        ListView1.Controls.Add(txb)

        ' txb.Focus()

        'this portion of code sets the textbox control to active allowing the cursor to be placed in it without the mouse hover over.

        Me.ActiveControl = txb

        ListView1_Rect()

    End Sub

    Private Sub txb_Leave(sender As Object, e As EventArgs) Handles txb.Leave

        Dim item As ListViewItem
        item = CType(txb.Tag, ListViewItem)

        item.SubItems(1).Text = txb.Text

    End Sub

    Private Sub ListView1_Rect()

        Dim x As Integer = 0
        Dim y As Integer = 0
        Dim Width As Integer = 0
        Dim height As Integer = 0

        ' GET THE ACTIVE CELL'S DIMENSIONS TO BIND THE textbox WITH IT.
        Dim rect As Rectangle
        rect = ListView1.GetItemRect(1, 2)

        x = rect.X + ListView1.Left
        y = rect.Y + ListView1.Top

        Width = rect.Width
        height = rect.Height

        With txb
            .SetBounds(x, y, Width, height)
            .Visible = True
            .Focus()
        End With
    End Sub


Что я уже пробовал:

Я попробовал функцию listview1.getitemtrect в надежде создать прямоугольник для привязки текстового поля тоже. Однако это не является обязательным для него. Я также попытался нарисовать прямоугольник в пространстве подэлементов для текстового поля. Это создавало непрерывный эффект мерцания, но текстовое поле перемещалось вместе с полосой прокрутки.

0 Ответов