crear controles en tiempo de ejecucion

18/12/2007 - 17:56 por daniel | Informe spam
Hola a todos
como se puede crear y eliminar controles en tiempo de ejecucion.
e probado esto pero no funciona como se podria hacer para tambien otro tipo
de controles ejml(WebBrowser,WindowsMediaPlayer1.)
'Ejemplo de creación de controles en tiempo de ejecución
Option Explicit
'Llevará la cuenta de los controles creados
Private numControles As Long
Private Sub cmdCrear_Click()
'Crear un nuevo control de cada tipo
'numControles está declarada a nivel de módulo
numControles = numControles + 1
'Crear los controles
Load Label1(numControles)
Load Text1(numControles)
'Posicionarlos y hacerlos visibles
With Label1(numControles)
.Visible = True
.Top = Label1(numControles - 1).Top + .Height + 120
.Caption = "Label1(" & numControles & ")"
End With
With Text1(numControles)
.Visible = True
.Top = Text1(numControles - 1).Top + .Height + 60
.Text = "Text1(" & numControles & ")"
End With
End Sub
Private Sub cmdEliminar_Click()
'Eliminar un elemento de cada control anteriormente creado
'El control CERO no se puede eliminar
If numControles > 0 Then
'Descargarlos de la memoria
Unload Label1(numControles)
Unload Text1(numControles)
numControles = numControles - 1
End If
End Sub


Private Sub userform_activate()
'Por defecto creamos un control de cada array:
'un Label y un Textbox

cmdCrear_Click
End Sub

un saludo a todos y muchas gracias
Daniel

Preguntas similare

Leer las respuestas

#1 Ivan
19/12/2007 - 04:05 | Informe spam
hola Daniel,


como se puede crear y eliminar controles en tiempo de ejecucion.







a lo mejor estoy equivocado, pero me da la impresion de que estas
intentando crear controles a partir de un array de controles. Si es
asi, y de nuevo si no me equivoco, VBA no admite los arrays de
controles, pero podrias usar el metodo add de la coleccion Controls
del userform

si quieres prueba este ejemplo:

inserta un userform y pon esto en su modulo

Sub CrearTextbox()
Dim n As Integer, m As Integer, t As Byte
For n = 1 To 3
For m = 1 To 3: t = t + 1
With Me.Controls.Add("Forms.TextBox.1")
.Name = "Text" & n: .Text = t
.Top = (n - 1) * 25: .Height = 25
.Left = (m - 1) * 25: .Width = 25
End With
Next
Next
End Sub
Private Sub UserForm_Initialize()
CrearTextbox
End Sub

y para eliminarlos en ejecucion echale un ojo al metodo renove.

solo por darte una idea

un saludo
Ivan
Respuesta Responder a este mensaje
#2 Ivan
19/12/2007 - 04:12 | Informe spam
fe de erratas: aqui=> .Name = "Text" & n

cambia la n por la t

y en cuanto al metodo 'renove' queria decir reMove

sorry

un saludo
Ivan
Respuesta Responder a este mensaje
#3 Héctor Miguel
19/12/2007 - 06:47 | Informe spam
hola, daniel !

adicional a las propuestas de Ivan :))

ejemplos (codigo y archivo para descargar) en la pagina de John Walkenbach
-> Creating a UserForm Programmatically
http://j-walk.com/ss/excel/tips/tip76.htm

(supongo que) para administrar controles de librerias distintas de "MSForms"
deberas revisar metodos/colecciones/propiedades/... (p.e.) en el examinador de objetos (tecla {F2} desde vba)
obviamente, habiendo establecido referencia a dicha/s liberia/s en el proyecto de macros (vba / herramientas / referencias...)

saludos,
hector.

__ la consulta original __
como se puede crear y eliminar controles en tiempo de ejecucion. e probado esto pero no funciona
como se podria hacer para tambien otro tipo de controles ejml(WebBrowser,WindowsMediaPlayer1.)
'Ejemplo de creacion de controles en tiempo de ejecucion
Option Explicit
'Llevara la cuenta de los controles creados
Private numControles As Long
Private Sub cmdCrear_Click()
'Crear un nuevo control de cada tipo
'numControles esta declarada a nivel de modulo
numControles = numControles + 1
'Crear los controles
Load Label1(numControles)
Load Text1(numControles)
'Posicionarlos y hacerlos visibles
With Label1(numControles)
.Visible = True
.Top = Label1(numControles - 1).Top + .Height + 120
.Caption = "Label1(" & numControles & ")"
End With
With Text1(numControles)
.Visible = True
.Top = Text1(numControles - 1).Top + .Height + 60
.Text = "Text1(" & numControles & ")"
End With
End Sub
Private Sub cmdEliminar_Click()
'Eliminar un elemento de cada control anteriormente creado
'El control CERO no se puede eliminar
If numControles > 0 Then
'Descargarlos de la memoria
Unload Label1(numControles)
Unload Text1(numControles)
numControles = numControles - 1
End If
End Sub
Private Sub userform_activate()
'Por defecto creamos un control de cada array:
'un Label y un Textbox
cmdCrear_Click
End Sub
Respuesta Responder a este mensaje
#4 daniel
20/12/2007 - 17:06 | Informe spam
Hola a todos
Muchas gracias por vuestra ayuda.
e optado mejor por la opcion de Ivan.
No e conseguido crear los controles
(WebBrowser,WindowsMediaPlayer1.)
los otros si que se an creado perfectamente.



un saludo y muchas gracias
Daniel
"Héctor Miguel" escribió en el mensaje
news:
hola, daniel !

adicional a las propuestas de Ivan :))

ejemplos (codigo y archivo para descargar) en la pagina de John Walkenbach
-> Creating a UserForm Programmatically
http://j-walk.com/ss/excel/tips/tip76.htm

(supongo que) para administrar controles de librerias distintas de
"MSForms"
deberas revisar metodos/colecciones/propiedades/... (p.e.) en el
examinador de objetos (tecla {F2} desde vba)
obviamente, habiendo establecido referencia a dicha/s liberia/s en el
proyecto de macros (vba / herramientas / referencias...)

saludos,
hector.

__ la consulta original __
como se puede crear y eliminar controles en tiempo de ejecucion. e
probado esto pero no funciona
como se podria hacer para tambien otro tipo de controles
ejml(WebBrowser,WindowsMediaPlayer1.)
'Ejemplo de creacion de controles en tiempo de ejecucion
Option Explicit
'Llevara la cuenta de los controles creados
Private numControles As Long
Private Sub cmdCrear_Click()
'Crear un nuevo control de cada tipo
'numControles esta declarada a nivel de modulo
numControles = numControles + 1
'Crear los controles
Load Label1(numControles)
Load Text1(numControles)
'Posicionarlos y hacerlos visibles
With Label1(numControles)
.Visible = True
.Top = Label1(numControles - 1).Top + .Height + 120
.Caption = "Label1(" & numControles & ")"
End With
With Text1(numControles)
.Visible = True
.Top = Text1(numControles - 1).Top + .Height + 60
.Text = "Text1(" & numControles & ")"
End With
End Sub
Private Sub cmdEliminar_Click()
'Eliminar un elemento de cada control anteriormente creado
'El control CERO no se puede eliminar
If numControles > 0 Then
'Descargarlos de la memoria
Unload Label1(numControles)
Unload Text1(numControles)
numControles = numControles - 1
End If
End Sub
Private Sub userform_activate()
'Por defecto creamos un control de cada array:
'un Label y un Textbox
cmdCrear_Click
End Sub




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida