Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

[SOLUCIONADO]  Consulta sobre propiedades de los controles
#1

Hola

Tengo una subrutina que se encarga de borrar las cajas de texto y demás controles con la propiedad "Text", como sabeis esta propiedad es heredada.

Mi primera pregunta de dos, ¿es correcto gestionar esta propiedad en una única subrutina para borrar la propiedad "Text" para todos los casos o es mejor crear subrutinas para controles afines y crear otra u otras para controles no afines. Os pongo un ejemplo, TextBox y TextArea son afines y con una subrutina en común podemos poner la propiedad Text = "" pero esto no es posible con DateBox, que aunque tiene la propiedad Text es de solo Lectura.

Mi segunda pregunta es, ¿como conozco que un control tiene la propieded Text en solo Lectura y así ir a la Propiedad Value, de por ejemplo DateBox?

Gracias.
    ¡Gracias!
#2

Hay maneras de saber si una clase tiene un método o no, etc., pero no te líes, a veces lo más simple es lo más efectivo. Pon esto en un módulo, por ejemplo y luego lo llamas cuando quieras "desvalorizar" los controles de un form.

GAMBAS
  1. Public sub Limpiacampos( Frm as form)
  2.   
  3.     Dim ctrl as object
  4.    
  5.     For each ctrl in Frm
  6.         try ctrl.Value=0
  7.         if Error then ctrl.Text=""
  8.     next
  9.  



Saludos

No podemos regresar
    ¡Gracias!
#3

Guapo tu sabes que te agradezco siempre tu super-criterio, pero este código al estilo 1 2 3, peta.

Yo lo he resuelto a lo tio cirulo, me fuera encantado saber si es reconocible el saber si es Text de solo Lectura, pero acabo de darme cuenta que tu código me va a dar una pista para resolver el mio con estas lineas.

GAMBAS
  1. try ctrl.Value=0 ' para mi esta línea seria Try obj.Text = ""
  2. if Error then ctrl.Text="" ' Y esta otra es como si obj (DateBox) obj.Value = ""



No se si te he podido explicar como voy a resolver mi código gracias al tuyo, yo no conocia que tras un Try podía evaluar Error que para mi es que Text es de solo Lectura y por lo tanto trato el Error con .Value y así resuelvo los DateBox.

Gracias tu si que eres un amigo Smile
    ¡Gracias!
#4

GAMBAS
  1. try ctrl.Value=0 ' para mi esta línea seria Try obj.Text = ""
  2.             if Error then ctrl.Text="" ' Y esta otra es como si obj (DateBox) obj.Value = "


"

Los objetos compuestos, como datebox, valuebox, etc., que disponen de propiedad Value, contienen en su interior Textboxes que muestran los valores, pero esos... llamémosles sub-controles, dependen siempre de la propiedad que defina el valor del "control padre". Es decir si testeas primero el textbox estás "puenteando" la propiedad Value del control. Por eso primero has de probar a vaciar el Value y sólo si falla, lo que quiere decir que no ofrece propiedad Value, vaciar entonces el .text. A la inversa puedes tener problemas según qué control sea.

Saludos.

No podemos regresar
[-] Los siguientes 1 usuarios dice gracias a Shordi por este post:
  • gambafeliz
    ¡Gracias!
#5

Buenas!.

¿ Y no sería más fácil si sabes que el control es de un tipo borrar el contenido de su propiedad text ?.

Estoy muy oxidado. Es un código algo más grande.

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.   Me.Title = "Limpiar texto de algunos controles"  
  4.   Label1.Text = "Esto no se puede borrar"
  5.   TextBox1.Text = "Esto se puede borrar"
  6.   TextArea1.Text = "Esto también se puede borrar"
  7.  
  8.  
  9. Public Sub Button1_Click()
  10.  
  11.   Limpiacampos(FMain)
  12.  
  13.  
  14. Public Sub Limpiacampos(Frm As Form)
  15.  
  16.   Dim ctrl As Object
  17.   Dim controleslimpiar As String[] = ["TextArea", "TextBox"]
  18.     
  19.   For Each ctrl In Frm.Controls    
  20.     'Si el contenido de la propiedad es distinto de nulo y se encuentra en el array de controleslimpiar     
  21.     If Not IsNull(Object.GetProperty(ctrl, "Text")) And controleslimpiar.Find(Object.Type(ctrl)) <> -1 Then ctrl.Text = ""
  22.   Next
  23.  



[Imagen: qUB7q0E.png]

[Imagen: DSOwAyr.png]

Se nos olvidó la propiedad "controls" del formulario.

Saludos

"El lobo siempre será malo si sólo escuchamos a Caperucita.". El lobo.
    ¡Gracias!
#6

Hola Shell Smile chavalote

Cuanto tiempo.... oju

Pues yo hago algo por el estilo, vosotros pasáis el Form y yo paso el Form y un array de Clases para después con un bucle ir directamente a las propiedades Text y en este caso Value y como sinceramente yo se lo que paso pues todo controlado. Ahora bien lo que dice Shordi estoy seguro que tiene razón y aunque no lo he probado confío plenamente en aquello de mas sabe el Diablo por viejo que por Diablo.

Ojo que a Shordi le tengo aprecio y para nada es algo para meterme con el, aunque intuyo que me entiende mis buenas intensiones.

Oye Shell, Gracias y me alegra saludarte aunque sea un ratito algún día.

Saludos.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)