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

Visual Basic 2005: bucle FOR

Estas en el tema de Visual Basic 2005: bucle FOR en el foro de Visual Basic clásico en Foros del Web. Hola: Tengo un problema al usar este bucle en una condición que tengo: Resulta ser que tengo un listbox y un textbox. Los items del ...
  #1 (permalink)  
Antiguo 23/09/2008, 07:28
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Visual Basic 2005: bucle FOR

Hola:

Tengo un problema al usar este bucle en una condición que tengo:

Resulta ser que tengo un listbox y un textbox. Los items del listbox al darle doble clic se agregaran en el textbox, pero para esto hay unas condiciones:

- Se agregara siempre y cuando no este repetido en el textbox.
- Siempre se agregara primero dos brincos de lineas mas el item del listbox
- Si es la primera vez que se agrega item, o sea si el textbox es NULL, se agregara el item sin los saltos de linea.

Un resultado de estas condiciones seria asi:

Código:
Foros del web, Temas generales de computación, programación, Visual Basic

San José, Costa Rica.

Martes 23 de setiembre de 2008
Tengo este código:

Código PHP:
 Private Sub agregar_enter()
        
Dim impar As String 'Indice del listbox'
        
Dim cadena As String 'Auxiliar para comparar cadena'
        
impar ListBox.SelectedIndices.Item(0'Obtiene el número de fila'
        
If TextBox.Text "" Then
         
'Primera condicion para saber si el textbox esta vacio'

            
cadena ListBox.Items(impar
            
Dim a As Integer
            a 
TextBox.Lines.Length 'Cantidad actual de líneas del textbox'
            
For As Integer 0 To a

            
'Esta condicion supone decir que desde el indice i hasta el maximo'
            'de lineas a, compare si cadena es diferente a la linea actual de texto'

                
If cadena <> TextBox.Lines(iThen
            
'si es asi, pase el texto al textbox'

                    
TextBox.AppendText(cadena)
                Else
            
'si no, salga del sub'
                    
Exit Sub
                End 
If
            
Next
        
Else
               
cadena ListBox.Items(impar)
            
Dim a As Integer
            a 
TextBox.Lines.Length
            
For As Integer 0 To a
                
If cadena <> TextBox.Lines(iThen
            
'Lo mismo que el anterior pero agregando lineas'

                    
TextBox.AppendText(vbnewline vbnewline cadena)
                Else
                    Exit 
Sub
                End 
If
            
Next
        End 
If
    
End Sub 
Si yo le quito el for y el if, si funciona pero omite repeticiones, para mi que el For es el que me está fallando, a ver si me pueden dar una mano en este problema que tengo, muchas gracias!
  #2 (permalink)  
Antiguo 23/09/2008, 10:53
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Visual Basic 2005: bucle FOR

Hay algunos problemas, primero que hacer un bucle para recorrer todo el TextBox cuando resulta que el TextBox está vacío es innecesario. Y segundo, que si te fijas agregará una línea en cada paso por el bucle, cuando lo que debería hacer es pasar primero por todo el bucle (para ver si no está repetido) y después agregar la línea.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 23/09/2008, 11:51
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: bucle FOR

Si David tienes toda la razon, ahora lo deje asi:

Código PHP:
        Dim impar As String
        Dim cadena 
As String
        Dim a 
As Integer 0
        impar 
listbox.SelectedIndices.Item(0
        If 
textbox.Text "" Then
            cadena 
listbox.Items(impar)
            
textbox.AppendText(cadena)
'Esta condicion solo pasa si el textbox es vacio'

        
Else
            
textbox.Lines.Length
            cadena 
listbox.Items(impar)
            For 
As Integer 0 To a
                
If cadena <> textbox.Lines(iThen
                      textbox
.AppendText(vbCrLf vbCrLf cadena)
                
End If
            
Next
        End 
If 
Pero sigue igual no me detecta lineas iguales, tengo una confusion logica en este for por eso me ha costado mucho seguir.

Despues del ELSE trato de decir que cadena tomara el valor del elemento seleccionado en el listbox para luego ser comparado con cada linea del textbox. Si cadena es diferente a la linea del texto, ya puede agregar, de lo contrario que se salga del Sub y no deje enviar la linea de texto por que se supone esta repetida.

Lo que pasa es que me repite el agregado en el textbox y se que es por que su indice no recorre todo el ancho, primero va preguntando uno por uno de sus indices y si uno funciona entonces ejecuta de una vez sin revisar los que faltan. Trate con un Do While pero no me funciono....

Código PHP:
            cadena listbox.Items(impar)
            
Dim i As Integer 0
            
Do While cadena textbox.Lines(i)
                
textbox.Lines.Length
                i 
1
                
If b Then
                    
Exit sub
                End 
If
            
Loop
            textbox
.AppendText(vbCrLf vbCrLf cadena
  #4 (permalink)  
Antiguo 23/09/2008, 12:47
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Visual Basic 2005: bucle FOR

¿No será mejor hacerlo así?
Código vb:
Ver original
  1. For i As Integer = 0 To a
  2.       If cadena = textbox.Lines(i) Then Exit Sub
  3. Next
  4. textbox.AppendText(vbCrLf & vbCrLf & cadena)
Lo que hacemos en este caso es recorrer todas las líneas hasta encontrar una repetida, si es repetida, salimos del Sub, si no encuentra ninguna repetida terminará el bucle con lo que agregará el texto.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 23/09/2008, 13:44
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: bucle FOR

Claro asi funciona de maravilla, seguro por estar todo el dia pensando en esto no se me ocurren mas ideas, nuevamente gracias David por tus aportes tan valiosos!
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




La zona horaria es GMT -6. Ahora son las 15:40.