elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Editar SubItems de un listview en VB.NET
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Editar SubItems de un listview en VB.NET  (Leído 8,617 veces)
bybaal

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Editar SubItems de un listview en VB.NET
« en: 8 Enero 2016, 17:28 pm »

Hola a todos, quisiera saber como permitir a los usuarios editar los subitems de un listview, ya que con la propiedad LabelEdit sólo se pueden editar los items, aquí les dejo un ejemplo para que se vea mejor

Código
  1.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.        Dim C As Integer
  3.  
  4.        ListView1.View = View.Details
  5.        ListView1.Columns.Add("Items")
  6.        ListView1.Columns.Add("SubItems", 70)
  7.        ListView1.FullRowSelect = True
  8.        ListView1.GridLines = True
  9.        'A pesar que permito modificar los items,
  10.        'no me lo permite para los subitems, que es lo que quiero hacer.
  11.        ListView1.LabelEdit = True
  12.  
  13.        For C = 0 To 20
  14.            ListView1.Items.Add("Prueba " & C)
  15.            ListView1.Items(C).SubItems.Add("SubItem " & C)
  16.        Next
  17.    End Sub
  18.  


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Editar SubItems de un listview en VB.NET
« Respuesta #1 en: 8 Enero 2016, 19:16 pm »

Esa es una limitación del control ListView, por lo tanto es algo que debes implementar por ti mismo.

Te he escrito el siguiente ejemplo funcional (para editar una celda o subitem haz doble-click):
Código
  1.    Friend WithEvents TextBoxLvItem As TextBox
  2.    Private currentItem As ListViewSubItem
  3.  
  4.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  5.  
  6.        Me.TextBoxLvItem = New TextBox With {.Visible = False}
  7.        Me.Controls.Add(Me.TextBoxLvItem)
  8.  
  9.    End Sub
  10.  
  11.    Private Sub ListView1_MouseClick(ByVal sender As Object, ByVal e As MouseEventArgs) _
  12.    Handles ListView1.MouseClick
  13.  
  14.        Me.TextBoxLvItem.Hide()
  15.  
  16.    End Sub
  17.  
  18.    Private Sub ListView1_MouseDoubleClick(ByVal sender As Object, ByVal e As MouseEventArgs) _
  19.    Handles ListView1.MouseDoubleClick
  20.  
  21.        Dim lv As ListView = DirectCast(sender, ListView)
  22.        Dim hitTest As ListViewHitTestInfo = lv.HitTest(e.X, e.Y)
  23.        Me.currentItem = hitTest.SubItem
  24.  
  25.        With Me.TextBoxLvItem
  26.            .Width = lv.Columns(hitTest.Item.Index).Width
  27.            .Left = (lv.Left + hitTest.SubItem.Bounds.Left + 3)
  28.            .Top = (lv.Top + hitTest.SubItem.Bounds.Top)
  29.            .Text = hitTest.SubItem.Text
  30.            .Show()
  31.            .Focus()
  32.            .SelectAll()
  33.        End With
  34.  
  35.        lv.SendToBack()
  36.  
  37.    End Sub
  38.  
  39.    Private Sub TextBoxLvItem_KeyUp(ByVal sender As Object, ByVal e As KeyEventArgs) _
  40.    Handles TextBoxLvItem.KeyUp
  41.  
  42.        Select Case e.KeyData
  43.  
  44.            Case Keys.Return ' Guardar el texto.
  45.                currentItem.Text = DirectCast(sender, TextBox).Text
  46.                DirectCast(sender, TextBox).Hide()
  47.  
  48.            Case Keys.Escape ' No guardar el texto.
  49.                DirectCast(sender, TextBox).Hide()
  50.  
  51.            Case Else
  52.                '...
  53.  
  54.        End Select
  55.  
  56.    End Sub
  57.  

PD: No actives el LabelEdit, no es necesario con el código que mostré.

Saludos


« Última modificación: 8 Enero 2016, 19:20 pm por Eleкtro » En línea



bybaal

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Re: Editar SubItems de un listview en VB.NET
« Respuesta #2 en: 8 Enero 2016, 20:18 pm »

Tengo en el listview dos columnas y 20 items, cada item tiene un subitem. Cuando el index del elemento es menor o igual que el index de la última columna funciona bien, pero cuando el el index del elemento es mayor que el index de la última columna, ejemplo: doy docble clic en un item o subitem de index >=3 da el siguiente error:

Código
  1. 'InvalidArgument=El valor de '4' no es válido para 'index'.
  2. 'Nombre del parámetro: index
  3. .Width = lv.Columns(hitTest.Item.Index).Width
  4.  

Esa es una limitación del control ListView, por lo tanto es algo que debes implementar por ti mismo.

Te he escrito el siguiente ejemplo funcional (para editar una celda o subitem haz doble-click):
Código
  1.    Friend WithEvents TextBoxLvItem As TextBox
  2.    Private currentItem As ListViewSubItem
  3.  
  4.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  5.  
  6.        Me.TextBoxLvItem = New TextBox With {.Visible = False}
  7.        Me.Controls.Add(Me.TextBoxLvItem)
  8.  
  9.    End Sub
  10.  
  11.    Private Sub ListView1_MouseClick(ByVal sender As Object, ByVal e As MouseEventArgs) _
  12.    Handles ListView1.MouseClick
  13.  
  14.        Me.TextBoxLvItem.Hide()
  15.  
  16.    End Sub
  17.  
  18.    Private Sub ListView1_MouseDoubleClick(ByVal sender As Object, ByVal e As MouseEventArgs) _
  19.    Handles ListView1.MouseDoubleClick
  20.  
  21.        Dim lv As ListView = DirectCast(sender, ListView)
  22.        Dim hitTest As ListViewHitTestInfo = lv.HitTest(e.X, e.Y)
  23.        Me.currentItem = hitTest.SubItem
  24.  
  25.        With Me.TextBoxLvItem
  26.            .Width = lv.Columns(hitTest.Item.Index).Width
  27.            .Left = (lv.Left + hitTest.SubItem.Bounds.Left + 3)
  28.            .Top = (lv.Top + hitTest.SubItem.Bounds.Top)
  29.            .Text = hitTest.SubItem.Text
  30.            .Show()
  31.            .Focus()
  32.            .SelectAll()
  33.        End With
  34.  
  35.        lv.SendToBack()
  36.  
  37.    End Sub
  38.  
  39.    Private Sub TextBoxLvItem_KeyUp(ByVal sender As Object, ByVal e As KeyEventArgs) _
  40.    Handles TextBoxLvItem.KeyUp
  41.  
  42.        Select Case e.KeyData
  43.  
  44.            Case Keys.Return ' Guardar el texto.
  45.                currentItem.Text = DirectCast(sender, TextBox).Text
  46.                DirectCast(sender, TextBox).Hide()
  47.  
  48.            Case Keys.Escape ' No guardar el texto.
  49.                DirectCast(sender, TextBox).Hide()
  50.  
  51.            Case Else
  52.                '...
  53.  
  54.        End Select
  55.  
  56.    End Sub
  57.  

PD: No actives el LabelEdit, no es necesario con el código que mostré.

Saludos
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Editar SubItems de un listview en VB.NET
« Respuesta #3 en: 8 Enero 2016, 20:37 pm »

Tienes razón, un fallo tonto. La manera correcta de obtener el índice de la columna sería la siguiente:

Código
  1. Dim columnindex As Integer = hitTest.Item.SubItems.IndexOf(hitTest.SubItem)

Con eso ya puedes solucionar el problema.

Por cierto, de nada.

Saludos!
En línea



bybaal

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Re: Editar SubItems de un listview en VB.NET
« Respuesta #4 en: 8 Enero 2016, 20:45 pm »

Ahora si quedo perfecto   ;-)

Tienes razón, un fallo tonto. La manera correcta de obtener el índice de la columna sería la siguiente:

Código
  1. Dim columnindex As Integer = hitTest.Item.SubItems.IndexOf(hitTest.SubItem)

Con eso ya puedes solucionar el problema.

Por cierto, de nada.

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Subitems en listview
Programación Visual Basic
mdg 1 1,884 Último mensaje 22 Octubre 2007, 21:59 pm
por mdg
List View Con subitems editables
Programación Visual Basic
pisacaballo 2 7,275 Último mensaje 6 Octubre 2008, 17:38 pm
por ssccaann43 ©
editar desde un listview
Programación Visual Basic
yochy20 0 1,311 Último mensaje 10 Noviembre 2008, 16:00 pm
por yochy20
ListView Y SUBITEMS ( C# )
.NET (C#, VB.NET, ASP)
Codename!! 4 12,831 Último mensaje 23 Marzo 2010, 21:58 pm
por raul338
ingresar subitems en un listview
.NET (C#, VB.NET, ASP)
llAudioslavell 6 12,047 Último mensaje 14 Septiembre 2011, 06:30 am
por llAudioslavell
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines