Comunidad Gambas-es

Versión completa: Consulta sobre propiedades de los controles
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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.
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
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
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.
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
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.