¿Cómo encontrar un item en un listview?

Tengo dos listview con dos botones, uno para asignar y otro para desasignar.
Cuando selección desasignar, tiene dos opciones, el recorre el lvw para encontrar el seleccionado en lvw1, cuando lo encuentra realiza ciertas acciones, lo que no se, es cual es el código para indicarle si no lo encuentra. Aquí envío el código como lo tengo diseñado hasta el momento:
Private Sub Cmddesasignar_Click()
Dim adbgrabar As ADODB.Recordset
Dim AdbInfo As ADODB.Recordset
Dim itmx1 As ListItem
Dim Retval1 As ValueConstants
Dim n As Integer
Dim Itmx As ListItem
    If Lvwmateriaprima1.ListItems.Count > 0 And Not Lvwmateriaprima1.SelectedItem Is Nothing Then
        Cantext.Visible = True
        Cantext.Enabled = True
        n = Lvwmateriaprima.ListItems.Count - 1
        If Lvwmateriaprima.ListItems.Count > 1 Then
            For Each itmx1 In Lvwmateriaprima.ListItems
                If itmx1.SubItems(2) = Lvwmateriaprima1.SelectedItem.SubItems(2) Then
                    Cantext.Text = Lvwmateriaprima1.SelectedItem.SubItems(4)
                    Asigtext.Text = Lvwmateriaprima.SelectedItem.SubItems(4)
                    Lvwmateriaprima.ListItems(Lvwmateriaprima.ListItems.Count - n).Selected = True
                    acumulab
                    Lvwmateriaprima.Enabled = True
                    Lvwmateriaprima.SelectedItem.SubItems(4) = Asigtext.Text
                    Lvwmateriaprima1.ListItems.Remove (Lvwmateriaprima1.SelectedItem.Index)
                    Cantext.Text = ""
                    Asigtext.Text = ""
                    Cmdasignar.Enabled = True
                    Cmddesasignar.Enabled = False
                    Cmdasignar.SetFocus
                    Exit Sub
                ElseIf itmx1.SubItems(2) <> Lvwmateriaprima1.SelectedItem.SubItems(2) Then
                    If Not Lvwmateriaprima1.SelectedItem Is Nothing Then
                    Set itmx1 = Lvwmateriaprima1.ListItems.Add(, , Lvwmateriaprima.SelectedItem.Text)
                    Lvwmateriaprima1.Sorted = True
                    Itmx.SubItems(1) = Lvwmateriaprima1.SelectedItem.SubItems(1)
                    Itmx.SubItems(2) = Lvwmateriaprima1.SelectedItem.SubItems(2)
                    Itmx.SubItems(3) = Lvwmateriaprima1.SelectedItem.SubItems(3)
                    Itmx.SubItems(4) = Lvwmateriaprima1.SelectedItem.SubItems(4)
                    Itmx.SubItems(5) = Lvwmateriaprima1.SelectedItem.SubItems(5)
                    End If
                End If
            Next itmx1
                   End If
    End If
End Sub

1 respuesta

Respuesta
1
Coloca una variable por fuera del for, la haces igual a false, si entra al for y lo encuentra la colocas en true, después del next del for preguntas por esa variable, si es tru la encontró, si es false no la encontró.
Hola. La verdad soy novato en programación. Te agradecería me indicaras tu respuesta en el código.
Dim Itmx As ListItem
    If Lvwmateriaprima1.ListItems.Count > 0 And Not Lvwmateriaprima1.SelectedItem Is Nothing Then
        Cantext.Visible = True
        Cantext.Enabled = True
        n = Lvwmateriaprima.ListItems.Count - 1
        If Lvwmateriaprima.ListItems.Count > 1 Then
Dim loEncontro As Boolean
loencontro=false
            For Each itmx1 In Lvwmateriaprima.ListItems
                If itmx1.SubItems(2) = Lvwmateriaprima1.SelectedItem.SubItems(2) Then
                    Cantext.Text = Lvwmateriaprima1.SelectedItem.SubItems(4)
                    Asigtext.Text = Lvwmateriaprima.SelectedItem.SubItems(4)
                    Lvwmateriaprima.ListItems(Lvwmateriaprima.ListItems.Count - n).Selected = True
                    acumulab
                    Lvwmateriaprima.Enabled = True
                    Lvwmateriaprima.SelectedItem.SubItems(4) = Asigtext.Text
                    Lvwmateriaprima1.ListItems.Remove (Lvwmateriaprima1.SelectedItem.Index)
                    Cantext.Text = ""
                    Asigtext.Text = ""
                    Cmdasignar.Enabled = True
                    Cmddesasignar.Enabled = False
                    Cmdasignar.SetFocus
loencontro=true
                    Exit Sub
                ElseIf itmx1.SubItems(2) <> Lvwmateriaprima1.SelectedItem.SubItems(2) Then
                    If Not Lvwmateriaprima1.SelectedItem Is Nothing Then
                    Set itmx1 = Lvwmateriaprima1.ListItems.Add(, , Lvwmateriaprima.SelectedItem.Text)
                    Lvwmateriaprima1.Sorted = True
                    Itmx.SubItems(1) = Lvwmateriaprima1.SelectedItem.SubItems(1)
                    Itmx.SubItems(2) = Lvwmateriaprima1.SelectedItem.SubItems(2)
                    Itmx.SubItems(3) = Lvwmateriaprima1.SelectedItem.SubItems(3)
                    Itmx.SubItems(4) = Lvwmateriaprima1.SelectedItem.SubItems(4)
                    Itmx.SubItems(5) = Lvwmateriaprima1.SelectedItem.SubItems(5)
loencontro=true
                    End If
                End If
            Next itmx1
                   End If
    End If
End Sub
Hola. Encontré una solución diferente, sin embargo aun tengo un problema. Cuando desasigno necesito que el item seleccionado en lvw1, quede sombreado en lvw. Me habías indicado que debía realizar lo siguiente:
lvwmateriaprima.listitems(lvwmateriaprima.listitems.count - 1). selected = true
¿Sin embargo aquí lo que necesito es que me encuentre un item como podría hacerlo?.
Te pido el favor que me regales el código.
Gracias.
Hola. El código lo tengo así:
Dim itmx2 as listitem
for each itmx2 in lvwmateriaprima.listitems
if itmx2.subitems(2) = lvwmateriaprima1.selecteditem.subitems(2) then
      lvwmateriaprima.enabled )= true
      lvwmateriaprima.selecteditem.subitems(2).selected = true
end if
next itmx2
Sin embargo aquí sombrea lo que esta en negrilla y me dice: "Calificador no válido"
Necesito que sombree en lvwmatriaprima el item que seleccione en lvwmateriaprima1
Agradezco tu ayuda, estoy al borde del colapso.
lvwmateriaprima.selecteditem.selected = true
Hola. Ya lo había intentado así, pero no lo asigna. No se si estoy definiendo mal el itmx2, es decir que no lo debe definir como un listitem... no se... por favor AYUDA!
lvwmateriaprima.selecteditem.Index= ' el valor de la fila a seleccionar
Tampoco, por que el deja sombreada la fila que se utilizo por ultimo vez en lvwmateriaprima, no la que es igual a la que se indica en lvwmateriaprima1.
La idea es que realice el recorrido con el for each en lvw, cuando lo encuentre lo pueda sobmrear o seleccionar, esto no lo esta haciendo y el index de lvw1 es diferente a lvw, así se este hablando del mismo elemento.
Ayuda!
si recorres el listview con un for el va seleccionado cada vez que uno hace referencia a un list item , preguntas si es lo que estas buscando si lo es entonces te sales del for con exit for.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas