Borrar última línea de un textbox

Iniciado por extreme69, 11 Mayo 2012, 09:14 AM

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

extreme69

Alguien me dice como se hace esto en VB6:

http://foro.elhacker.net/empty-t335521.0.html

Tengo el número de linea que quiero borrar, ¿como la borro?

extreme69

Ta, olvidense, lo hago con un listbox y a la ***** :P

79137913

#2
HOLA!!!

Código (vb) [Seleccionar]
Private sub DeleteLine (XLine as long, TXT as TextBox)
Dim Aux() as string
Aux = Split(TXT.Text, VbNewLine)
Txt.text=Vbnullstring
For X = 0 to ubound(aux)
   if X <> XLine then txt.text = txt.text & Aux(x) & VbNewLine
Next
End Sub


(no lo testee pero debe funcinar)

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Saberuneko

Cita de: extreme69 en 11 Mayo 2012, 09:16 AM
Ta, olvidense, lo hago con un listbox y a la ***** :P

Así lo arreglé yo en su momento :3

Deeo Raiser

#4
Hola extreme69, como estas ?

Aca tengo tu solución testeada  ;D, estuve mirando el codigo de 79137913 y no me funciono   :-(, así que le hice unas modificaciones y te agrego 2 funciones para poder contar las lineas de los TextBox o algún String


ELIMINAR UNA LINEA POR SU NUMERO
Código (vb) [Seleccionar]

   Dim Lineas() As String 'Auxiliar donde se guardan las lineas
   Dim I  As Long 'Variable del contador
   
   Lineas = Split(Texto.Text, vbNewLine)
   
   'Borro el contenido de Texto
   Texto.Text = vbNullString
   
   For I = 0 To UBound(Lineas)
       If I <> NumeroLinea Then
           'Si la linea es distinta a la que quiero eliminar la agrego, sino la omito
           Texto.Text = Texto.Text & Lineas(I) & vbCrLf
       End If
   Next
   Borrar_Linea = Texto.Text


CONTAR LINEAS EN UN STRING [FORMA ABSURDA]
Código (vb) [Seleccionar]

Private Function Contar_Lineas_A_Lo_Loco(Texto As TextBox)
   'HAGO UN FOR QUE RECORRA TODOS LOS CARACTERES DEL TEXTO
   For I = 0 To Len(Texto.Text)
       'SI EL CARACTER LEIDO ES UN SALTO DE LINEA CON RETORNO DE CARRO, CUENTO UNA LINEA.
       If Mid(Texto.Text, I, 1) = vbCrLf Then
           Contar_Lineas = Contar_Lineas + 1
       End If
   Next
End Function



CONTAR LINEAS EN UN STRING [FORMA GROSA]
Código (vb) [Seleccionar]

Private Function Contar_Lineas_A_Lo_Pro(Texto As TextBox) As Long
   Dim Lineas() As String 'Auxiliar donde se guarda los saltos de linea
   'Corto el texto por los saltos de linea....
   Lineas = Split(Texto.Text, vbNewLine)
    'Y luego cuento la dimencion de la matriz
    Contar_Lineas_A_Lo_Pro = UBound(Lineas)
End Function




Bueno, eso es todo, espero que te sea de utilidad.
Saludos



"Recuerda siempre que tu propia  resolución de triunfar es mas importante que cualquier otra cosa."
Abraham Lincoln

79137913

#5
HOLA!!!

...

Mi codigo funciona el problema es que no le puse el End Sub al final por eso no te andaba.

En tu codigo la unica diferencia es que expandiste mi if.

Aparte...

Tu codigo para contar lineas es erroneo, aca abajo lo corregí.

Código (vb) [Seleccionar]
Private Function XLines(TXT As TextBox) As Long
   XLineas = UBound(Split(TXT.Text, vbNewLine))+1
End Function


Primero, mucho codigo sin sentido ahi arriba lo optimice al maximo.

Aparte como el array empieza de 0 siempre tu codigo va a contar una linea menos por eso el +1.

Igual me agrada que haya alguien que se anime a postear codigo, falta gente asi en este subforo.

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Deeo Raiser

Cita de: 79137913 en 11 Mayo 2012, 20:13 PM
Primero, mucho codigo sin sentido ahi arriba lo optimice al máximo.

La idea es que el código sea fácil y rápidamente legible, en cuanto a "mucho codigo sin sentido", no lo comprendo, el cogido esta y cumple una función, en poner un if en una sola linea no se optimiza nada, mas que ahorrar renglones.
En cuanto a tu código, no solo le falto en End Sub, declaraste un procedimiento y le pasaste parámetros en ves de declarar una función, tampoco devuelve ningún valor, ademas faltan declarar variables. La idea estaba y funcionaba, pero el código estaba incompleto.

Cita de: 79137913 en 11 Mayo 2012, 20:13 PM

Tu codigo para contar lineas es erroneo, aca abajo lo corregí.
Aparte como el array empieza de 0 siempre tu codigo va a contar una linea menos por eso el +1.

Eso es correcto, no lo tuve en cuenta-

Cita de: 79137913 en 11 Mayo 2012, 20:13 PM
Igual me agrada que haya alguien que se anime a postear codigo, falta gente asi en este subforo.

De este foro aprendí mucho y quiero (aunque sean pequeñeces) devolver algo.

Saludos y Gracias Por leer. !!!





"Recuerda siempre que tu propia  resolución de triunfar es mas importante que cualquier otra cosa."
Abraham Lincoln

raul338

Cita de: Deeo Raiser en 11 Mayo 2012, 21:06 PM
La idea es que el código sea fácil y rápidamente legible, en cuanto a "mucho codigo sin sentido", no lo comprendo, el cogido esta y cumple una función, en poner un if en una sola linea no se optimiza nada, mas que ahorrar renglones.
Eso es subjetivo, aunque depende que tanto lleves programando y ya te acostumbres a expresiones amontonadas :P

CitarEn cuanto a tu código, no solo le falto en End Sub, declaraste un procedimiento y le pasaste parámetros en ves de declarar una función, tampoco devuelve ningún valor, ademas faltan declarar variables. La idea estaba y funcionaba, pero el código estaba incompleto.
Ni idea como estaba el código antes de la edición, pero tampoco hace falta que sea una función, con una simple llamada y ya. No falta ninguna variable

Ademas de que tu código no pusiste la firma de la función :P y sin eso esta linea
Borrar_Linea = Texto.Text
Esta al pedo :P (y NumeroLinea sin declarar :P)

Ya si quiere mucha performance (a.k.a Editor de codigo o editor (casi procesador) de texto) puede utilizar el Split que gano en los retos y la clase para Concatenar de manera rápida :P

burbu_1

Cita de: Deeo Raiser en 11 Mayo 2012, 18:35 PM
CONTAR LINEAS EN UN STRING [FORMA ABSURDA]
Código (vb) [Seleccionar]

Private Function Contar_Lineas_A_Lo_Loco(Texto As TextBox)
    'HAGO UN FOR QUE RECORRA TODOS LOS CARACTERES DEL TEXTO
    For I = 0 To Len(Texto.Text)
        'SI EL CARACTER LEIDO ES UN SALTO DE LINEA CON RETORNO DE CARRO, CUENTO UNA LINEA.
        If Mid(Texto.Text, I, 1) = vbCrLf Then
            Contar_Lineas = Contar_Lineas + 1
        End If
    Next
End Function


la forma no me parece tan absurda, pero tiene algún error  :P

1º En el mid empiezas a contar desde el caracter 0 y debería ser desde el 1, si no te tira error

2º Como tú mismo explicas, buscas 1 salto de linea y 1 retorno de carro.... eso son dos caracteres

3º como te pasó con el código pro, empiezas contando por 0 y no por 1
Código (vb) [Seleccionar]

Private Function Contar_Lineas_A_Lo_Loco(Texto As TextBox)
    Contar_Lineas =  1
    'HAGO UN FOR QUE RECORRA TODOS LOS CARACTERES DEL TEXTO
    For I = 1 To Len(Texto.Text)
        'SI EL CARACTER LEIDO ES UN SALTO DE LINEA CON RETORNO DE CARRO, CUENTO UNA LINEA.
        If Mid(Texto.Text, I, 2) = vbCrLf Then
            Contar_Lineas = Contar_Lineas + 1
        End If
    Next
End Function



Por último en ambos códigos añadís al final del texto original una nueva linea... y si llamas varias veces a la función se van a ir acumulando....
Código (vb) [Seleccionar]

texto.text = left( texto.text,  len(texto.text)-2 )



Saludos.

79137913

HOLA!!!

Cita de: Deeo Raiser en 11 Mayo 2012, 21:06 PM
La idea es que el código sea fácil y rápidamente legible, en cuanto a "mucho codigo sin sentido", no lo comprendo, el cogido esta y cumple una función, en poner un if en una sola linea no se optimiza nada, mas que ahorrar renglones.
En cuanto a tu código, no solo le falto en End Sub, declaraste un procedimiento y le pasaste parámetros en ves de declarar una función, tampoco devuelve ningún valor, ademas faltan declarar variables. La idea estaba y funcionaba, pero el código estaba incompleto.

Empiezo enumerar...

Codigo sin sentido por que:
Código (vb) [Seleccionar]
    Dim Lineas() As String 'Auxiliar donde se guardan las lineas
    Dim I  As Long 'Correcto
   
    Lineas = Split(Texto.Text, vbNewLine)

    'Borro el contenido de Texto
    Texto.Text = vbNullString

    For I = 0 To UBound(Lineas)
        If I <> NumeroLinea Then
            'usas 3 renglones cuando se deberia usar uno ya que solo se hace una llamada
            Texto.Text = Texto.Text & Lineas(I) & vbCrLf
        End If
    Next
    Borrar_Linea = Texto.Text ' sin sentido totalmente


y por este otro:
Código (vb) [Seleccionar]
Private Function Contar_Lineas_A_Lo_Pro(Texto As TextBox) As Long
    Dim Lineas() As String' gastas un array mas osea mas memoria y 3 lineas en vez de 1 como abajo
    Lineas = Split(Texto.Text, vbNewLine)
    'Y luego cuento la dimencion de la matriz
    Contar_Lineas_A_Lo_Pro = UBound(Lineas)
End Function

contra:
Código (vb) [Seleccionar]
Private Function XLines(TXT As TextBox) As Long
    XLineas = UBound(Split(TXT.Text, vbNewLine))+1
End Function


Para elmiminar una linea no es necesario que sea una funcion, un procedimiento alcanza ya que no se debe devlver retorno alguno.

PD: Raul el codigo antes de la modificacion era asi:
Código (vb) [Seleccionar]
Private sub DeleteLine (XLine as long, TXT as TextBox)
Dim Aux() as string
Aux = Split(TXT.Text, VbNewLine)
Txt.text=Vbnullstring
For X = 0 to ubound(aux)
    if X <> XLine then txt.text = txt.text & Aux(x) & VbNewLine
Next


GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*