Recorrer ListBox con ForEach y posicionarme

Iniciado por |Miguel|, 17 Abril 2012, 17:09 PM

0 Miembros y 1 Visitante están viendo este tema.

|Miguel|

Hola a todos, ¿qué tal?

Bueno, os cuento. Tengo un formulario que tiene una lista de clientes en una ListBox que contiene items de una clase mía que he llamado Cliente.

Tengo una función buscar que busca clientes repetidos para actualizar o insertar uno nuevo según el caso. Este es el framento de código:

Código (vbnet) [Seleccionar]
Public Sub actualizar()
        If validar() Then
            Dim posicion As Integer = 0
            Dim nombre As String = txtNombre.Text
            Dim apellidos As String = txtApellidos.Text
            Dim mandarInformacion As Boolean = chkMandarInformacion.CheckState
            Dim analizarRiesgo As Boolean = chkAnalizarRiesgo.CheckState
            Dim direccion As String = txtDireccion.Text
            Dim codigoPostal As String = txtCodigoPostal.Text
            Dim persona As Cliente = New Cliente(nombre, apellidos, mandarInformacion, analizarRiesgo, direccion, codigoPostal)

            If Not buscarCliente(persona, posicion) Then
                lstListaDeClientes.Items.Add(persona)
                lstListaDeClientes.SelectedIndex = lstListaDeClientes.Items.Count - 1
            Else
                lstListaDeClientes.Items.Item(posicion) = persona
            End If
        End If
    End Sub

    Public Function buscarCliente(ByVal persona As Cliente, ByRef i As Integer) As Boolean
        Dim ok As Boolean = False

        For Each cli As Cliente In lstListaDeClientes.Items
            If persona.apellidos.Trim.Equals(cli.apellidos.Trim) AndAlso persona.nombre.Trim.Equals(cli.nombre.Trim) Then
                ok = True
                lstListaDeClientes.SelectedItem = cli
                Exit For
            End If
            i += 1
        Next

        'For i = 0 To lstListaDeClientes.Items.Count - 1
        '    If lstListaDeClientes.Items.Count > 0 Then
        '        lstListaDeClientes.SelectedIndex = i
        '    End If
        '    If persona.apellidos.Trim.Equals(lstListaDeClientes.Items.Item(i).apellidos.Trim) _
        '            AndAlso persona.nombre.Trim.Equals(lstListaDeClientes.Items.Item(i).nombre.Trim) Then
        '        ok = True
        '        Exit For
        '    End If
        'Next
        Return (ok)
    End Function


pero al que manda se le ha puesto entre ceja y ceja 1º que use for each en lugar del for y después que me cargue la i... y no sé hacerlo sin ella...

¿ayuda? Gracias.

rembolso

#1
mira  con el FOR EACH  estas recorriendo un Array de datos, yo te aconsegaria que uses arrays de datos   y utilices el listview para la visualización de ella.

te dejo un ejemplo para que no estes tan perdido.

Código (vb) [Seleccionar]
Dim Array() As String ,cadena As Variant 'modifique la variable,  variant y no a string
ReDim Array(1) ' redimensiono 2 posiciones

Array(0) = "Rembolso"
Array(1) = "I'm sexy and kanowit"

For Each cadena In Array
MsgBox(cadena )
Next

nota: estas en .net ?

raul338

Che yo movi este tema a .net, ... o sera que el js me devolvio que se movio y no hizo nada :xD

kub0x

Es fácil.. recorres el listbox con un bucle for each que obtenga cada elemento de Items por cada iteracción...

Ejemplo:

Código (VB.NET) [Seleccionar]
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Try
            For Each elemento As String In ListBox1.Items
                If elemento.Contains("Elhacker.net") Then 'si el elemento del listbox contiene la variable que almacena el nombre del cliente...
                    ListBox1.SelectedIndex = ListBox1.Items.IndexOf(elemento) 'nos posicionamos en éste
                End If
            Next
        Catch ex As Exception
        End Try
    End Sub


Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


|Miguel|

Sí, estoy en .net. No había visto el subforo lo siento.

Bueno, gracias a todos. Me ha servido para hacer lo que me pedían, presentarlo al jefe y que me dijera que lo dejaba como estaba al principio... ¬¬

En fin, gracias.