Visual Basic - Agregar controles

Life is soft - evento anual de software empresarial
 
Vista:

Agregar controles

Publicado por Fernando (18 intervenciones) el 05/12/2000 00:00:00
Hola. Me gustaría saber cómo puedo agregar controles dinámicamente a un formulario mediante código. Por ejemplo añadir etiquetas (Label) a un formulario dentro de una matriz (o coleccion) de controles conforme el usuario vaya añadiendo nuevas opciones. Es decir ¿puedo crear instancias de Label sin haber creado ninguna? Se debe de poder, el problema es ¿como? Agradeceria codigo de ejemplo. MUCHAS GRACIAS.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Agregar controles

Publicado por Erik (77 intervenciones) el 05/12/2000 00:00:00
Sí se puede, y es muy fácil. Primero tienes que tener un Label cuya propiedad Index sea 0 para convertirlo en una matriz de controles. A partir de aquí:

Load lblEtiqueta(NuevoElemento)

Donde NuevoElemento es el índice que tendrá el elemento que estás cargando, es decir, si ya tienes uno con la propiedad Index=0, el nuevo debe ser 1, el siguiente 2, el siguiente 3... Por supuesto, puedes (y debes) usar una variable para indicar el índice.

Lo único que tienes que tener en cuenta es lo siguiente: al cargar un control en una matriz con la instrucción Load, el control que se cargue heredará el valor de todas las propiedades del elemento de la matriz cuyo valor Index sea más bajo (normalmente el 0), excepto la propiedad Index (por razones obvias) y la propiedad Visible, que siempre será False. Esto se hace así para que puedas colocar primero el control donde quieras y luego mostrarlo.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Agregar controles

Publicado por Fernando (18 intervenciones) el 07/12/2000 00:00:00
Perdona mi ignorancia, pero no se cuando te refieres que tengo que agregar el control inicial. ¿te refieres a hacerlo de forma visual o por codigo? Para mi lo ideal seria hacerlo por codigo. Yo concretamente declaro una variable label y luego mediante el metodo de commands.add inserto la etiqueta en un frame. El problema es que luego no puedo modificar la propiedad index de la etiqueta porque me dice que es de solo lectura. Con lo cual no hay vector de etiquetas, que es lo que me interesa. Por otro lado considero muy interesante que no tenga que insertar ninguna etiqueta en el proyecto de forma visual.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Agregar controles

Publicado por Erik (77 intervenciones) el 13/12/2000 00:00:00
Perdón por la tardanza.

Efectivamente, con Controls.Add puedes crear controles dinámicamente, pero no matrices de controles. Sí podrías declarar una variable como una matriz y meter los controles en esta, pero la pega es que no podrías usar sus eventos, ya que no se pueden declarar matrices WithEvents:

Private NuevoControl() as Label

Private Sub CrearControl
Static intContador as Integer

ReDim NuevoControl(intContador)

Set NuevoControl(intContador)=Me.Controls.Add("VB.Label", "lbl" & Cstr(intContador))

With NuevoControl(intContador)
.Left=lo que sea
.Top=lo que sea
.Visible=True
End With

intContador=intContador+1

End Sub

Pero, como te digo, no podrías usar los eventos de los nuevos controles, por eso lo mejor es hacerlo como te decía.

Por cierto, cuando digo el control inicial, quiero decir en tiempo de diseño (o en forma visual, que es lo mismo). No hay otro modo.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Agregar controles

Publicado por Fernanfo (18 intervenciones) el 14/12/2000 00:00:00
Ya lo he solucionado. Al final he optado por usar un control inicial invisible y a partir de este genero la matriz, como me dijiste.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar