Estoy sentado en una de VB proyecto y tengo un ListView con 3 células; una casilla de verificación, un nombre y el otro valor de texto. Quiero que la última celda a ser editable por el usuario. La segunda célula también es bueno tener editable, no hay problemas en absoluto.

¿Cómo puedo ajustar a las células para ser editable?

Ahora tengo este código para rellenar el cuadro de lista:

Dim row(3) As String
Dim itm As ListViewItem
Dim txtbox As New TextBox

row(0) = ""
row(1) = "some value"
row(2) = "0"


itm = New ListViewItem(row)
itm.SubItems.Add("txtbox")

ListView1.Items.Add(itm

Cualquier consejos de cómo permitir que el usuario cambie la última (o ambos a la segunda y última) de la célula?

InformationsquelleAutor gubbfett | 2012-04-24

4 Comentarios

  1. 6

    La Winforms control ListView no puede ser utilizado como un control DataGrid.

    Sólo el primer elemento puede ser hecho editable el establecimiento de la propiedad LabelEdit=True.

    Si usted realmente quiere ser capaz de editar cualquier ‘células’ de la ListView cuando en Detalle el modo, usted tiene dos posibilidades:

    • Cambiar a un DataGrid
    • Utilizar uno de los muchos extensión disponible de forma gratuita en la red (Un ejemplo puede ser encuentra aquí)
  2. 0

    No se puede editar una fila en particular en un listview pero se puede quitar y, a continuación, vuelva a agregar un valor. Por desgracia no tengo idea de cómo añadir varias celdas de la misma fila, pero saber cómo quitar y agregar una sola celda de la columna en un control listview. Tal vez esto podría ser un comienzo.

    Dim item As ListViewItem = ListView1.SelectedItems(0)
    Dim intIndex As Integer = item.Index
    
    item.Remove()
    ListView1.Items.Insert(intIndex, "New Text")
  3. 0

    Hay truco con la edición de las células. Tienes que crear offset textbox y lo puso a un lugar de la celda que desea editar (tecla de prueba, establecer la ubicación y tamaño).

    HTML:

    Dim iRow, iCol as Integer
    
    Private Sub TextOverlay_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
            ListView1.Items(iRow).SubItems(iCol).Text = TextOverlay.Text
    End Sub
    
    Private Sub ListView1_Click(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseClick
            Dim hit As ListViewHitTestInfo = ListView1.HitTest(e.X, e.Y)
            Dim iWidth As Integer
            For iCol = 0 To hit.Item.SubItems.Count - 1
                If hit.Item.SubItems(iCol).Bounds.Left <= e.X Then
                    If iCol = 0 And hit.Item.SubItems.Count > 1 Then
                        If e.X <= hit.Item.SubItems(1).Bounds.Left Then
                            iWidth = hit.Item.SubItems(1).Bounds.Left
                            Exit For
                        End If
                    ElseIf e.X <= hit.Item.SubItems(iCol).Bounds.Right Then
                        iWidth = hit.Item.SubItems(iCol).Bounds.Width
                        Exit For
                    End If
                End If
            Next
            iRow = hit.Item.Index
            TextOverlay.Left = ListView1.Left + hit.SubItem.Bounds.Left + 3
            TextOverlay.Top = ListView1.Top + hit.SubItem.Bounds.Top
            TextOverlay.Width = iWidth
            TextOverlay.Height = 18
            TextOverlay.Text = hit.SubItem.Text
            TextOverlay.Visible = True
            TextOverlay.ReadOnly = False
    End Sub

    • En la mayoría de los casos la gente lo que sugiere este cuadro de texto-superposición de solución olvidarse de desplazamiento en el cuadro de texto permanece en su lugar cuando el usuario se desplaza ListView. Otro problema es que necesitamos implementar una interfaz de teclado para proporcionar al usuario la posibilidad de seleccionar cualquier punto de editar. ListView tiene otros inconvenientes serios (leer este artículo), así que definitivamente sería reemplazar ListView con otro control, como una cuadrícula si usted necesita para editar sus células.
  4. 0

    Hay manera de conseguir elemento seleccionado y, a continuación, utilizar BeginEdit() llamada en ListViewItem .
    Para el despacho de cambio: ListView.AfterLabelEdit Evento

Dejar respuesta

Please enter your comment!
Please enter your name here