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

Visual Basic 2005: TextBox

Estas en el tema de Visual Basic 2005: TextBox en el foro de Visual Basic clásico en Foros del Web. Hola a todos vengo con unas dudas con los textbox. La primera es: En esta imagen (1) tengo 3 textbox. El #2 tiene los anchors ...
  #1 (permalink)  
Antiguo 17/09/2008, 16:29
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: TextBox

Hola a todos vengo con unas dudas con los textbox.



La primera es: En esta imagen (1) tengo 3 textbox. El #2 tiene los anchors left, up y right, cuando la ventana se expande queda de esa forma como en la imagen 2.



Si yo le doy a los anchors left, right, up y down, me acomoda bien los textbox como en la imagen 3.



Este textbox #2 tiene una opcion externa incrementar el tamaño de los caracteres, entonces cuando hago eso, minimizo y luego maximizo, se deforma el textbox como en la imagen 4.



Como puedo establecer que el textbox se quede como este? Si no le pongo el anchor down, el textbox nunca se deforma ni con el cambio de tamaño de letras
  #2 (permalink)  
Antiguo 18/09/2008, 09:00
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: TextBox

Lo que yo suelo hacer para controlar la presentación de la ventana es usar el evento Resize y cambiar el tamaño proporcionalmente a los controles.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 18/09/2008, 09:38
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: TextBox

Que tal David.

Gracias por tu aporte, lo probe con el siguiente código:

Código PHP:
        Private Sub Textbox_Resize(ByVal sender As System.ObjectByVal e As System.EventArgsHandles textbox.Resize
        Dim myControl 
As textBox
        myControl 
sender
        
If myControl.Size.Height <> myControl.Size.Width Then
            myControl
.Size = New Size(myControl.Size.WidthmyControl.Size.Width)
        
End If
    
End Sub 
Pero me pasa lo que esta en la imagen:
Las lineas de color rojo es donde deberian estar los limites de cada textbox, y ahi como se ve, se expande una vez abierto el programa. Sera que estoy programando algo mal? Gracias!



PD: le quite todos los anchors.
  #4 (permalink)  
Antiguo 18/09/2008, 09:41
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: TextBox

A lo que me refería es que uses el Resize de la ventana, no del TextBox. Y en ese evento redimensionar todos tus controles según como quieres que se vea.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 18/09/2008, 10:07
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: TextBox

Gracias David, ahora me esta pasando lo mismo, es por este desconocimiento que me intriga.

Este es el codigo que puse:

Código PHP:
Private Sub Form1_ResizeBegin(ByVal sender As System.Object_
ByVal e 
As System.EventArgsHandles MyBase.ResizeBegin

        Dim myControl 
As Form
        Dim textbox1 
As textbox
        myControl 
sender
        textbox1 
sender

        
If myControl.Size.Height <> myControl.Size.Width Then
            myControl
.Size = New Size(myControl.Size.WidthmyControl.Size.Width)
        
End If
        If 
textbox1.Size.Height <> textbox1.Size.Width Then
            textbox1
.Size = New Size(textbox1.Size.Widthtextbox1.Size.Width)
    
End If

End Sub 
El problema que me da es como dije en el primer post, el ultimo cuadro. Cuando tengo el texto, le cambio de tamaño al texto no cambia nada, pero si lo minimizo y luego maximizo se me deforma el textbox donde habia cambiado el tamaño de sus caracteres. Eso no pasa si no le cambio el tamaño, será por eso?

Tengo declarado un ComboBox que tiene 3 items (Grande, mediano, pequeño) y cada uno tiene un numero de tamaño a ese textbox.

PD: Si le quito el anchor down al textbox, no pasaria ese problema pero no se extiende bien el textbox cuando esta maximizado completamente.

Última edición por moradazo; 18/09/2008 a las 10:23
  #6 (permalink)  
Antiguo 18/09/2008, 10:35
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005: TextBox

Pero el caso es que en realidad no estás ajustando el tamaño, estás simplemente manteniendo el mismo tamaño.

Por ejemplo, para que en realidad surtiera efecto, deberías obtener una proporción:
Código vb:
Ver original
  1. 'Aplicamos una regla de 3 para obtener una proporción
  2. Ancho_Actual_TextBox = (Ancho_Inicial_TextBox * Ancho_Actual_Form) / Ancho_Inicial_Form
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 18/09/2008, 10:50
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: TextBox

Mira lo que hice:

textbox1.Size = New Size(textbox1.MinimumSize * form1.Size) / form1.MinimumSize

lo que esta subrayado es que visual me lo marca diciendome:
- Operator '*' is not defined for types 'System.Drawing.Size' and 'System.Drawing.Size'.
- 'Form1.Form1' cannot refer to itself through its default instance; use 'Me' instead.

Será que no puedo usar operaciones aritméticas en el programa?

tambien probe con:

textbox1.Width = ((textbox1.Width * Me.Width) / Me.Width)

Pero no se como decirle cuando es actual y cuando es inicial...

Gracias.
  #8 (permalink)  
Antiguo 18/09/2008, 11:18
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005: TextBox

Con tamaño inicial me refiero al tamaño que tienen al cargar el formulario, eso es constante, ya que los defines en el diseño.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 18/09/2008, 11:40
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: TextBox

Ok David ya voy entendiendo:

'Estas son las declaraciones de los tamaños
Me.textbox1.Size = New Size(592, 329)
Me.Size = New Size(1119, 744)

Ahora esta parte es la que me está costando:

Me.textbox1.Width = (Me.textbox1.Width * Me.Width) / Me.Width

A simple vista se puede ver que cada ancho escrito ahí es el inicial pues se están cargando desde las declaraciones. Lo que no se es como decirle el ancho actual...

Si me puedes ayudar en eso, mientras investigo, gracias!
  #10 (permalink)  
Antiguo 18/09/2008, 12:05
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: TextBox

En realidad el ancho actual es el que tienes en las propiedades Width y Height. Prueba así:
Código vb:
Ver original
  1. Me.textbox1.Width = (592 * Me.Width) / 1119
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 18/09/2008, 12:29
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: TextBox

Vieras que no me hace el cambio, asi tengo el codigo, sera que me falta algo?

Código PHP:
Private Sub form_Resize(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Resize
        Me
.textbox.Size = New Size(592329)
        
Me.Size = New Size(1119744)

        If 
textbox.Size.Height <> textbox.Size.Width Then
            Me
.TextBox.Width = (592 Me.Width) / 1119
        End 
If

    
End Sub 
Mira asi se ve maximizado:

http://tinypic.com/view.php?pic=35170ic&s=4

Otra cosa, cuando trato de hacer mas grande la ventana tomando una esquina con el mouse, no me esta dejando, por que sera?
Gracias!

Última edición por moradazo; 18/09/2008 a las 12:35
  #12 (permalink)  
Antiguo 18/09/2008, 12:43
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005: TextBox

Mira, si te fijas:
Código vb:
Ver original
  1. Me.textbox.Size = New Size(592, 329)
  2. Me.Size = New Size(1119, 744)
Lo que estás haciendo es cuando se redimensiona la ventana, volverla a su tamaño original, lo cual no es lo que queremos.
Código vb:
Ver original
  1. If textbox.Size.Height <> textbox.Size.Width Then
Esa comparación no tiene mucho sentido. Estás preguntando si el ancho y el alto son diferentes, lo cual no viene al caso en este contexto.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 18/09/2008, 13:49
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: TextBox

Si, tienes razon con lo de la comparacion. La primera declaracion la quite, y ahora vuelve a abrirme el textbox, o sea a deformarlo despues de maximizarlo, mira el proceso:

Aqui se ve la ventan maximizada
http://i35.tinypic.com/25pmis1.jpg

Cuando se maximiza aun le falta completar al lado derecho
Como podras ver la letra cambio, arriba a la izquierda esta esa opcion de aumentar el tamaño
http://i37.tinypic.com/28bbekh.jpg

Si se minimiza y luego se maximiza, se deforma el textbox.
http://i38.tinypic.com/1jvnzc.jpg

Ahora la declaración la dejé así:

Código PHP:
Private Sub Form_Resize(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Resize
        Me
.textbox.Width = (592 Me.Width) / 1119
End Sub 
Aún no entiendo por que no funciona, debo aclarar que el texbox aun está declarado con los anchors. Sin ellos no se maximiza nunca.
  #14 (permalink)  
Antiguo 18/09/2008, 13:57
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: TextBox

Primero, hay que quitarle los anchors, segundo, creo que pensando mejor, en este caso lo que necesitamos no es hacerlo proporcional, sino hacer que ocupen todo el espacio de la ventana.

En ese caso lo que haríamos en realidad sería algo como esto:
Código vb:
Ver original
  1. Me.textbox.Size.Width = Ancho_Ventana - Ancho_Panel - Ancho_Otro_TextBox - Espaciado
Lo mismo hay que hacer con la altura (Height). Espero no te haya confundido.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #15 (permalink)  
Antiguo 18/09/2008, 14:46
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: TextBox

Excelente David nuevamente muchas gracias!

Si entendi, gracias de verdad tus aportes son oro!

Así quedó el código:

Código PHP:
Private Sub Form_Resize(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Resize

        Me
.textbox.Width Me.Width 530
        Me
.textbox.Height Me.Height 420

End Sub 
Los valores que estan ahi son todos los demas controles que se encuentran alrededor de ese textbox entonces los sume, de todas formas cuando la ventana se restaura o maximiza, los valores cambiaran ya que el Me.Height y Me.Width cambiará su valor como variable que es y restará automáticamente con ese número constante.

Nuevamente muchas gracias David y disculpa mis insistentes post.
  #16 (permalink)  
Antiguo 18/09/2008, 17:48
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: TextBox

Hola nuevamente amigos:

Resulta que tengo un textbox con mucha informacion repetida al inicio de la siguiente forma:

Código:
Espanol: Hola como estan todos
Ingles: Hello, how are you
Espanol: Muchas gracias
Ingles: Thank you, very much
Espanol: Donde estan todos
Ingles: Where are everyone
Y ocupo que quede asi:

Código:
Ingles: Hello, how are you
Espanol: Hola como estan todos
Ingles: Thank you, very much
Espanol: Muchas gracias
Ingles: Where are everyone
Espanol: Donde estan todos
Intente hacerlo con reemplazos pero no me sirve, ocupo la cadena completa cambiada, si me pueden dar una mano, gracias!
  #17 (permalink)  
Antiguo 19/09/2008, 09:21
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: TextBox

Puedes usar indexOf para buscar los saltos de línea e ir leyendo las líneas y cambiándolas.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #18 (permalink)  
Antiguo 19/09/2008, 10:48
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: TextBox

Gracias David, lo resolvi de esta forma:

Código PHP:
Dim slinea As String ""
Dim cadena1 As String ""
Dim cadena2 As String ""
          
If System.IO.File.Exists(C:/test.txt) = True Then
            Dim objReader 
As New System.IO.StreamReader(C:/test.txt), System.Text.Encoding.Default)
            Do While 
objReader.Peek() <> -1
                sLinea 
objReader.ReadLine()
                If 
sLinea.StartsWith("Espanol"Then
                    cadena1 
sLinea
                End 
If
                If 
sLinea.StartsWith("Ingles"Then
                    cadena2 
sLinea
                    TextLine 
TextLine & (cadena1 vbNewLine cadena2) & vbNewLine
                End 
If
            
Loop
            objReader
.Close()
        
End If 
Este codigo hace una lectura de un archivo de texto (C:/test.txt) aceptando todos los acentos y caracteres especiales como la "ñ" (System.Text.Encoding.Default). Lo que hace es tomar las cadenas que empiezan por Espanol y las ordena en una variable tipo String (cadena1), luego otra condicion de que cuando empiezan en Ingles se agreguen en otra variable tipo String (Cadena2). Al final se concatenaran con brincos de lineas, el orden que yo necesite hacerle. Se puede agregar por ahi un contador para sumar las lineas del textbox.

Gracias!
  #19 (permalink)  
Antiguo 19/09/2008, 10:52
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: TextBox

Otra consulta disculpen mi insistencia:

En un textbox como puedo hacer para restringir que se agreguen dos comentarios iguales?
Mi forma de agregar esos comentarios es por medio de un listbox, al darle doble clic se agregan al textbox:

TextBox.AppendText(ListBox.Items(indice) & vbnewline)

Gracias!
  #20 (permalink)  
Antiguo 19/09/2008, 11:05
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: TextBox

En ese caso sí puedes usar indexOf para saber si la cadena ya existe en el texto, y si así es, no llamar al AppendText.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #21 (permalink)  
Antiguo 19/09/2008, 12:46
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: TextBox

Gracias David, tome tu consejo e hice este código:

Código PHP:
        For As Integer 0 To lineas 
        
'lineas es el numero de linea seleccionada en el listbox'

            
If textbox1.Lines(i) <> "" Then
        
'Esta condicion no tomará en cuenta las líneas NULL'

                
If textbox1.Lines(i).IndexOf(textbox1.Lines(i)) <> -1 Then

 
'Aqui necesito hacer una comparación pero no me da nada de lo que'
 'he puesto, si me pueden ayudar como comparo 2 cadenas aca, gracias'        

                
End If
            
End If
        
Next 
  #22 (permalink)  
Antiguo 19/09/2008, 13:06
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: TextBox

Código PHP:
    Private Sub txtText_Change()
        
Dim nLineas As Long
        nLineas 
SendMessageLong(TextBox1.Handle, &HBA0&, 0&)
        
TextBox2.Text nLineas
    End Sub 
Vi también por internet que se puede contar los caracteres con SendMessageLong, pero siempre me esta dando 0, pienso que el WM no es el correcto, podria ser eso que no me cuenta las lineas? Lo ocupo saber para poder decirle al programa cuantas líneas hay en el momento de comparación.
  #23 (permalink)  
Antiguo 19/09/2008, 13:43
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005: TextBox

En realidad no entendí muy bien lo que pretendes con el primer código. En realidad la comparación debería ser algo como:
Código vb:
Ver original
  1. If textbox.Lines(i) = Texto_que_no_debe_repetirse Then
  2.    'Aquí realizamos una acción cuando el texto ya se encuentra en el TextBox
  3. End If
Y para contar las líneas usa textbox.Lines.Count.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #24 (permalink)  
Antiguo 19/09/2008, 14:13
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: TextBox

Me diste una gran idea con ese codigo que me diste David, ya logré que contara las líneas y por ende, detectar líneas repetidas, te diré con detalle:

Código PHP:
 Dim a As Integer

        a 
TextBox1.Lines.Length 'Cuenta las lineas del textbox'

'Dos for anidados, la variable "i" y la variable "j". La variable "i" se mantiene en'
'una posicion hasta que "j" recorra todas las lineas del textbox, despues la "i" se'
'desplazará una línea después hasta acabar. Se debe poner una condición que '
'es cuando "i" y "j" sean iguales, es logico que sus lineas lo van a hacer por lo '
'que hay que omitirlo' 

        
For As Integer 0 To a
            
For As Integer 0 To a
                
If <> j Then
                    
Try
                        If 
TextBox1.Lines(i) = TextBox1.Lines(jThen
                            MsgBox
("hay iguales")
                            Exit 
Sub
                        End 
If
                    Catch 
ex As Exception
                        
Exit Try
                    
End Try
                
End If
            
Next
        Next 
Gracias David!
  #25 (permalink)  
Antiguo 22/09/2008, 08:24
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: TextBox

Hola que tal todos! quiero borrar una línea del textbox, las líneas las calculo así:

NumLineas = Textbox.Lines.Lenght

Entonces digamos que quiero encontrar la línea 7 que dice "Hola" y me la borre o la reemplace por un NULL, he tratado así:

Código PHP:
for i=0 to NumLineas
 
if textbox.lines(i) = "Hola" then
    Textbox
.Text.Remove(i)
 
End If
Next 
También he probado con:

Código PHP:
for i=0 to NumLineas
 
if textbox.lines(i) = "Hola" then
   ancho 
Len(textbox.Lines(i))
   
textbox.Lines(i).Remove(0ancho)
 
End If
Next 
Ninguna de las dos formas lo hace, será que estoy equivocado en algo? si me pueden dar una mano les agradeceré muchísimo. Gracias!
  #26 (permalink)  
Antiguo 22/09/2008, 11:47
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: TextBox

ya me resolví el problema:

Código PHP:
Dim NumLineas As Integer
Dim cadena 
As String

for i=0 to NumLineas 
 
if textbox.lines(i) = "Hola" then 
     cadena 
textbox.Lines(i)
     
textbox.Text Replace(textbox.Texttextbox.Lines(i) & vbNewLine"")
     
textbox.Text textbox.Text & (cadena vbNewLine)
 
End If 
Next 
Ahora tengo una duda que no he podido resolver, saben como hacer para que cuando escriba una linea al darle ENTER pueda brincar dos líneas? o bien esa línea que yo escribí, al pegar un texto en ese textbox, no se pegue seguido si no con dos líneas de más?

Ejemplo:

Tengo este texto:
"Hola como estan"

Al pegar un texto que no se vea así:
"Hola como estanTexto pegado"

Si no que se vea asi:
"Hola como estan"

"Texto pegado"

Pensé algo así:

Código PHP:
TextBox2.Lines.Length
        
For As Integer 0 To a
            TextBox2
.Text TextBox2.Lines(i) + vbNewLine vbNewLine
        Next 
El problema es que cuando escribo la primera letra por ejemplo la "h" de "hola", el cursor se me devuelve al primer campo, si quisiera escribir toda la palabra me lo hace así: "olah"

Les agradezco mucho.
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 23:01.