Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Validar eliminacion de item en un ListView

Estas en el tema de Validar eliminacion de item en un ListView en el foro de Visual Basic clásico en Foros del Web. Amigos de ForosdelWeb acudo a sus conocimientos por un problema que tengo en un programa hecho en visual basic 6.0, el problema consiste en que ...
  #1 (permalink)  
Antiguo 22/05/2008, 14:24
Avatar de hiper_xavier  
Fecha de Ingreso: mayo-2008
Mensajes: 7
Antigüedad: 16 años
Puntos: 0
Validar eliminacion de item en un ListView

Amigos de ForosdelWeb

acudo a sus conocimientos por un problema que tengo en un programa hecho en visual basic 6.0, el problema consiste en que nesecito que en un ListView al presionar un boton de Eliminar, si en el ListView no hay ningun elemento seleccionado, compare todos los elementos de la lista con un campo Txt_Num_Ser.Text y si es igual que lo borre pero si no que diga "No existe ningun elemento con esa descripcion o el campo Numero de serie esta vacio" o algo asi, lo tengo hecho pero al momento de borrar, sin haber ningun elemento seleccionado igual borra, y borra desde el primero elemento hacia abajo, eso es un error que no me puedo permitir tener en mi programa, parece basico, pero no e podido resolver este enigma, quizas por mi poca experiencia en programacion, por eso acudo a su ayuda, mas abajo esta el codigo fuente y al final esta el diagrama de flujo (Disculpen si me equiboque con la presentacion de los simbolos), agradeceria su ayuda, DE ANTEMANO GRACIAS
PD: esta lleno de comentarios, no limpie el codigo
Código:
Private Sub Cmd_Quitar_Ing_Click() 
'Dim N_de_S_T_temp As String 
Dim i As Integer 
Dim Sw1 As Boolean 
'If Lst_Ingreso_Temp..Selected Then 
Sw1 = False 
Lst_Ingreso_Temp.SelectedItem = "" 
If Lst_Ingreso_Temp.ListItems.Count = 0 Then 
MsgBox "No existen elementos para eliminar", vbExclamation + vbOKOnly, "Error..." 
ElseIf Lst_Ingreso_Temp.ListItems.Count <> 0 Then 
'''Primero verificamos que en el ListView no haya un item seleccionado o no 
'MsgBox "hay elementos" 
If Lst_Ingreso_Temp.SelectedItem <> "" Then 
'MsgBox "hay elementos seleccionados" 
MsgBox Lst_Ingreso_Temp.SelectedItem 
Lst_Ingreso_Temp.ListItems.Remove (Lst_Ingreso_Temp.SelectedItem.Index) 
ElseIf Lst_Ingreso_Temp.SelectedItem = "" Then 
MsgBox "chao" 
' MsgBox "hola" 
'If Lst_Ingreso_Temp.SelectedItem.Selected = False Then 
'MsgBox "no hay elemento seleccionado", vbOKOnly 
''' En caso de que no haya un item seleccionado se recorre la lista para borrar 
''' cualquier item que coincida con el valor unico del numero de serie 
For i = Lst_Ingreso_Temp.ListItems.Count To 1 Step -1 
If Lst_Ingreso_Temp.ListItems(i).Text = Txt_Num_Ser.Text Then 
Sw1 = True 
End If 
Next i 
If Sw1 = True Then 
For x = Lst_Ingreso_Temp.ListItems.Count To 1 Step -1 
If Lst_Ingreso_Temp.ListItems(x).Text = Txt_Num_Ser.Text Then 
Lst_Ingreso_Temp.ListItems.Remove (Lst_Ingreso_Temp.ListItems(x).Index) 
End If 
Next x 
ElseIf Sw1 = False Then 
MsgBox "El elemento que desea eliminar no existe", vbExclamation + vbOKOnly, "Error..." 
End If 
End If 
End If 
'Else 
'MsgBox "No hay elementos en la lista o no se a seleccionado ninguno", vbExclamation + vbOKOnly, "Error de eliminación" 
End Sub
DIAGRAMA DE FLUJO

  #2 (permalink)  
Antiguo 23/05/2008, 02:43
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Validar eliminacion de item en un ListView

Hola, mira si te vale esta función:

Código:
Function BuscarLV(lv As ListView, sBuscado As String, vCol As Integer) As Boolean
Dim lItem As ListItem, i As Integer
With lv
    If vCol = 0 Then ' buscar por la primera columna
        Set lItem = .findItem(sBuscado, lvwText)
    Else    ' buscar sólo en la columna indicada
        For i = 1 To .ListItems.Count
            If .ListItems(i).SubItems(vCol) = sBuscado Then
                Set lItem = .ListItems(i)
                Exit For
            End If
        Next i
    End If
    If Not (lItem Is Nothing) Then
        lItem.Selected = True
        i = lItem.Index
        .ListItems.Remove (i)   ' lo eliminamos
        BuscarLV = True
    End If
End With
End Function
Para llamarla le pasas como parámetros el nombre del ListView, el valor del campo a buscar (que lo hemos escrito en un Text1) y el número de columna por donde buscar (teniendo en cuenta que la primera columna es cero)

Código:
Private Sub Cmd_quitar_Ing_Click()
Dim bEncontrado As Boolean
bEncontrado = BuscarLV(ListView1, Text1, 3)
If bEncontrado = False Then MsgBox "No existe"
End Sub

  #3 (permalink)  
Antiguo 24/05/2008, 01:24
Avatar de hiper_xavier  
Fecha de Ingreso: mayo-2008
Mensajes: 7
Antigüedad: 16 años
Puntos: 0
Respuesta: Validar eliminacion de item en un ListView

Gracias por tu ayuda tratare de adaptar el codigo que me as dado, pero mi problema es otro, yo ya puedo encontrar y eliminar un item especifico sin .find con los booleanos ws1 y sw2 que estan en mi codigo , mi problema es que hay un detalle, si tu haces click por accidente fuera del Listview o enotro campo que no sea el ListView , este oviamente pierde el foco y DEVERIA no borrar ningun item hasta que se seleccione uno de la lista O comparar el contenido de un campo Txt_Num_ser.text (Campo con valor unico no repetible el cual contiene temporalmente un numero de serie el cual al apretar OTRO boton que se llama Agregar agrega al ListView que en mi codigo se llama Lst_Ingreso_Temp mas el contenido de otros 3 campos mas, ej

Numero de serie:_________________ Categoria :__________________
Estado: _________________ Descripcion :__________________

AGREGAR ELIMINAR MODIFICAR etc......

el campo que me intereza es el Numero de serie(Txt_Num_Ser.text), el problema no esta en encontrar un item y borrarlo, esta en que al momento de no haber ningun item seleccionado en el ListView yo quiero que NO me borre ningun elemento hasta que se seleccione un elemento en la lista O que en la lista haya algun elemento igual al contenido de Txt_Num_Ser.text (Oviamente pregunta DESEA ELIMINAR ESTE ELEMENTO), sin embargo el problema que tiene el codigo que puse es que a pesar que lo que te nombre anteriormente ya esta todo validado AUN ASI al no haber ningun elemento seleciconado en la lista igual borra elementos y los borra en forma secuencial, extrañamente al hacer unas pruebas con algunas ayudas como los msgbox que disen "Hola" y "Chao" en el codigo que puse, me dan como resultado que en el ListView hay elementos seleccionados,no habiendo ninguno, pasan a la parte del codigo que dice ELSE IF LISTVIEW.SELECTEDITEMS <> "" (si es que hay elementos seleccionados) LISTVIEW.DELETE LISTVIEW.SELECTEDITEM , incluso cuando yo ejecuto el programa hago un click afuera del ListView a proposito pero igual detecta elementos seleccionados en la lista, no se como hacerlo,estoy viendo que no hay nada seleccionado pero igual borra, e visto algunos codigos de ejemplo como IF NOT LISTVIEW IS NOTHING THEN o IF LISTVIEW.LISTITEMS.SELECTED=FALSE THEN pero ninguno funciona ese es mi problema, disculpa las molestias
  #4 (permalink)  
Antiguo 24/05/2008, 03:15
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Validar eliminacion de item en un ListView

Bueno, eso ocurre porque el control ListView, aunque no tenga el foco, siempre tiene un elemento seleccionado aunque no esté resaltado (para comprobarlo, utiliza el depurador paso a paso).

La solución que yo veo es ponerle CheckBoxes al ListView (propiedad Checkboxes = True) y el código quedaría reducido a esto:

Código:
Private Sub Cmd_Quitar_Ing_Click()
Dim i As Integer
Dim Sw1 As Boolean
With Lst_Ingreso_Temp   ' este es el ListView
    For i = .ListItems.Count To 1 Step -1
        If .ListItems(i).Checked = True Or .ListItems(i).Text = Txt_Num_Ser.Text Then
            If MsgBox("Seguro borrar elemento " & i, vbCritical + vbYesNo, "Atención!") = vbYes Then
                .ListItems.Remove i
                Sw1 = True
            End If
        End If
    Next i
    If Sw1 = False Then
        MsgBox "No hay elementos en la lista o no se a seleccionado ninguno", vbExclamation + vbOKOnly, "Error de eliminación"
    End If
End With
End Sub

  #5 (permalink)  
Antiguo 24/05/2008, 21:40
Avatar de hiper_xavier  
Fecha de Ingreso: mayo-2008
Mensajes: 7
Antigüedad: 16 años
Puntos: 0
Respuesta: Validar eliminacion de item en un ListView

Gracias amigo, boy a probar el codigo que me diste, te cuento como me fue, muchas gracias
  #6 (permalink)  
Antiguo 27/05/2008, 15:37
Avatar de hiper_xavier  
Fecha de Ingreso: mayo-2008
Mensajes: 7
Antigüedad: 16 años
Puntos: 0
Respuesta: Validar eliminacion de item en un ListView

Gracias amigo tu ayuda me sirvio, el codigo CASI final (por que quiero ver todos los errores posibles que tenga, incluso los que me afecten funciones futuras) es el siguiente

Código:
Dim i, x As Integer
Dim Sw1 As Boolean
Dim Arg1(50)  As String
Dim Cont1 As Integer


With Lst_Ingreso_Temp   ' este es el ListView
' Verifico que hayan items en la lista
If .ListItems.Count = 0 Then
    
    MsgBox "No hay elementos en la lista", vbExclamation + vbOKOnly, "Error de eliminación"
     
Else
   
   Cont1 = 0
    
    For i = .ListItems.Count To 1 Step -1
        
        
        If .ListItems(i).Checked = True Or .ListItems(i).Text = Txt_Num_Ser.Text Then
          
            ' en esta variable se contiene la cantidad de items que seran borrados
            Cont1 = Cont1 + 1
            ' y este arreglo guarda el index de los elementos a borrar
            Arg1(Cont1) = i
        
        
        Sw1 = True
        
        End If
    
    Next i
    
    If Sw1 = True Then
    
    If MsgBox("Items Seleccionados: " & Cont1 & vbCrLf & "Seguro borrar estos elementos", vbCritical + vbYesNo, "Atención!") = vbYes Then
                          
                'borro los elementos leyendo el arreglo en forma invertida para no alterar la lista de elementos                For x = 1 To Cont1
                  .ListItems.Remove Int(Arg1(x))
                Next x
    End If
    
    Else
        MsgBox "no se a seleccionado ningun elemento" & vbCrLf & "o en numero al que se hace referencia no esta en la lista", vbExclamation + vbOKOnly, "Error de eliminación"
        Txt_Num_Ser.Text = ""
        Txt_Num_Ser.SetFocus
    End If
End If
End With
 
End Sub
si te fijas, elimina todos los elementos seleccionados de una sola vez, y muestra cuantos son, de todas formas es ovio que a medida que avance en la construccion de el programa boy a tener que cambiarle algo, pero el objetivo principal de la funcion borrar esta listo


PD: ojala esto me sirva para ser un buen programador y ganarme la vida sin miedo a lo que me pida el cliente
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:29.