Comunidad Gambas-es
[SOLUCIONADO] Consulta sobre propiedades de los controles - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: [SOLUCIONADO] Consulta sobre propiedades de los controles (/thread-578.html)



Consulta sobre propiedades de los controles - gambafeliz - 06-09-2021

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.


RE: Consulta sobre propiedades de los controles - Shordi - 06-09-2021

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.

Código:
Public sub Limpiacampos( Frm as form)
  
    Dim ctrl as object
   
    For each ctrl in Frm
        try ctrl.Value=0
        if Error then ctrl.Text=""
    next

End

Saludos


RE: Consulta sobre propiedades de los controles - gambafeliz - 06-09-2021

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.

Código:
try ctrl.Value=0 ' para mi esta línea seria Try obj.Text = ""
        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


RE: Consulta sobre propiedades de los controles - Shordi - 07-09-2021

Código:
try ctrl.Value=0 ' para mi esta línea seria Try obj.Text = ""
            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.


RE: Consulta sobre propiedades de los controles - Shell - 07-09-2021

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.

Código:
Public Sub Form_Open()

  Me.Title = "Limpiar texto de algunos controles"  
  Label1.Text = "Esto no se puede borrar"
  TextBox1.Text = "Esto se puede borrar"
  TextArea1.Text = "Esto también se puede borrar"

End

Public Sub Button1_Click()

  Limpiacampos(FMain)

End

Public Sub Limpiacampos(Frm As Form)

  Dim ctrl As Object
  Dim controleslimpiar As String[] = ["TextArea", "TextBox"]
    
  For Each ctrl In Frm.Controls    
    'Si el contenido de la propiedad es distinto de nulo y se encuentra en el array de controleslimpiar     
    If Not IsNull(Object.GetProperty(ctrl, "Text")) And controleslimpiar.Find(Object.Type(ctrl)) <> -1 Then ctrl.Text = ""
  Next

End

[Imagen: qUB7q0E.png]

[Imagen: DSOwAyr.png]

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

Saludos


RE: Consulta sobre propiedades de los controles - gambafeliz - 07-09-2021

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.