Label Creada En Tiempo De Ejecucion


Subject: Label Creada En Tiempo De Ejecucion
Hola

Me sucede lo siguiente:

Si quiero agregar un Label puesto en el IDE a un grupo, no tengo ningún problema y los eventos del grupo (por ejemplo MouseDown()) responden sin problema. Pero si quiero agregar el Label a un grupo por codigo me aparece el error:

"Símbolo 'Group' desconocido en la clase Label"

Alguien tiene alguna idea o me estoy equivocando en algo.

El código donde lo hago es el siguiente:

item = New HPanel(HPanelItems)
With item
.name = "item" & Str(contador)
.Expand = True
.tag = "numero"
.H = 30
End With

lblItem = New Label(item)
With lblItem
.W = 30
.h = 30
.Text = contador
.Tag = "numero"
.Font.Bold = True
.Border = 1
.Background = nColor
.Alignment = Align.center
.Group = "xxx" 'Aqui el error
End With

Profile PM  
Subject: Re: Label Creada En Tiempo De Ejecucion
tiene pinta de ser un bug

ya que al poner . (Punto)

la propiedad group no aparece.

lo probé en mi pc y me pasa lo mismo.

saludos.

Last edited by v3ctor on Friday, 16 September 2016, 04:33; edited 2 times in total
Subject: Re: Label Creada En Tiempo De Ejecucion
Hola, Whisper.

Por la información que he encontrado en inglés, es que Group es una propiedad sólo del IDE.
Acá un enlace donde Misini da algunas opciones a usar en ese caso:

https://sourceforge.net/p/gambas/mailman/message/8963906/

Una traducción por mi (no muy exacta) es:

1) Si necesitas administrar los eventos de muchos controles con el mismo manejador de eventos, usa la propiedad del control 'Group' en el IDE, o dale el mismo nombre a todos tus controles si los creas a mano.

2) Puedes poner todos los controles que necesites en un array Object[]. Es volver a la manera VB.

3) Si todos tus controles están en el mismo Contenedor (Container), puedes Enumerarlos con la propiedad Children de ese contenedor.

4) Puedes usar la propiedad Tag. En gambas, el Tag puede ser lo que tu quieras no solo una cadena (String).

5) Puedes usar Herencia y/o composición (?) con las clases de los controles nativos.

Espero te sirva,

Saludos....

Profile PM  
Subject: Re: Label Creada En Tiempo De Ejecucion
La esencia de un grupo de objetos es compartir los mismos eventos.
En el IDE puedes usar la opción group, en tiempo real tienes otras maneras, como ya te han apuntado.
Otra manera, la más aproximada a usar el grupo en el ide, es suministrar un nombre común de observer para todas.
Prueba ésto:
Public Sub Form_Open()

Dim f As Textbox
Dim n As Integer


For n = 0 To 9
f = New Textbox(Me) As "Etiqueta" 'Etiqueta es el nombre que damos al observador
f.y = n * 28
f.width = 100
f.height = 28
f.name = "caja" & Str(n)
f.visible = True
Next

End

Public Sub Etiqueta_Change() 'Los eventos de Etiqueta son colectivos para todos los textbox

Print Last.Name

End

Te creará diez textboxes y cada vez que cambies uno de ellos te imprimirá su nombre en consola

Last edited by shordi on Friday, 16 September 2016, 08:48; edited 2 times in total
Profile PM  
Subject: Re: Label Creada En Tiempo De Ejecucion
Hola a todos.

Disculpen la demora en contestar. Estuve leyendo sus respuestas y voy a probar cual es la opción que mas se adapta a lo que estoy haciendo.

Tal vez una combinación de cosas como poner el mismo nombre y distinto .tag, el problema es que estoy usando la opción .tag para otra cosa.

Después les cuento. Muchas Gracias por sus comentarios.

Profile PM  
Subject: Re: Label Creada En Tiempo De Ejecucion
whisper escribió: [Ver mensaje]
el problema es que estoy usando la opción .tag para otra cosa.



la propiedad tag es un array de tipo variant así que podes usar la misma propiedad para muchas cosas

vuott puso un ejemplo por ahí ahora no se donde esta


saludos.

Subject: Re: Label Creada En Tiempo De Ejecucion
Bueno, lo pude solucionar. Use el método que propuso shordi y quedo asi:

item = New HPanel(HPanelItems)
With item
.name = "item" & Str(contador)
.Expand = True
.tag = "numero"
.H = 30
End With

lblItem = New Label(item) as "ObjItems"
With lblItem
.W = 30
.h = 30
.Text = contador
.Tag = "numero"
.Font.Bold = True
.Border = 1
.Background = nColor
.Alignment = Align.center
End With


... y en

ublic Sub ObjItems_MouseDown()

.
.
aborrar = Last.name
...etc
End


...obtengo el nombre para identificar cual borrar.

Gracias a todos.

Profile PM  
Subject: Re: Label Creada En Tiempo De Ejecucion
Quiero solo añadir otras dos posibilidades.

Uso de la Clase Observer:
Public Sub Form_Open()

Dim f As Textbox
Dim n As Integer
Dim obs As Observer

For n = 0 To 9
With f = New Textbox(Me)
.X = 0
.Y = n * 28
.W = 100
.H = 28
.Name = "caja" & Str(n)
End With
obs = New Observer(f) As "Etiqueta" 'Etiqueta es el nombre que damos al observador
Next

End


Public Sub Etiqueta_Change() 'Los eventos de Etiqueta son colectivos para todos los textbox

Print Last.Name

End




Uso del metodo .Attach( ) de la Clase Object:
Public Sub Form_Open()

Dim f As Textbox
Dim n As Integer

For n = 0 To 9
With f = New Textbox(Me)
.X = 0
.Y = n * 28
.W = 100
.H = 28
.Name = "caja" & Str(n)
End With
Object.Attach(f, Me, "Etiqueta") 'Etiqueta es el nombre que damos al observador
Next

End


Public Sub Etiqueta_Change() 'Los eventos de Etiqueta son colectivos para todos los textbox

Print Last.Name

End

Profile PM  
Subject: Re: Label Creada En Tiempo De Ejecucion
Bien

Nuevamente gracias a todos. Nunca había usado esto de los observadores, pero ofrecen una alternativa a la opción "Group" por código y se ve con muchas posibilidades más.

Gracias.

Profile PM  

Page 1 of 1


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.1887s (PHP: -40% SQL: 140%)
SQL queries: 25 - Debug Off - GZIP Enabled