¿Como abrir desde el código un formulario del que sólo conozco el nom
¿Hay alguna manera de, sabiendo el nombre de un formulario, poderlo invocar desde el código sin usar el metodo show o load del propio objeto del formulario?
Es decir, si tengo un formulario que se llama Form1, se puede mostrar o cargar en memoria con su metodo, Form1.show, o Form1.load ... pero, ¿se puede hacer esto, por ejemplo, desde una funcion "generica", para abrir cualquier formulario de la aplicación?... es decir
sub AbreFormulario(Nombre as string)
... abrirlo
end sub
Por supuesto, no puedo tener previamente todos los formularios cargados en memoria para buescarlo con el objeto forms.
Gracias por adelantado
Es decir, si tengo un formulario que se llama Form1, se puede mostrar o cargar en memoria con su metodo, Form1.show, o Form1.load ... pero, ¿se puede hacer esto, por ejemplo, desde una funcion "generica", para abrir cualquier formulario de la aplicación?... es decir
sub AbreFormulario(Nombre as string)
... abrirlo
end sub
Por supuesto, no puedo tener previamente todos los formularios cargados en memoria para buescarlo con el objeto forms.
Gracias por adelantado
no se si lo he comprendido bien, lo que puedes hacer es que el parámetro de Sub AbreFormulario se tipo Form
Sub AbreFormulario(Nombre As Form)
Nombre.Show
End Sub
A ver si es esto lo que quieres. Un saludo.
Sub AbreFormulario(Nombre As Form)
Nombre.Show
End Sub
A ver si es esto lo que quieres. Un saludo.
Gracias por tu ayuda Enco. No puedo pasarle el formulario como objeto, pues lo único que tengo del formulario es el nombre. Se que ese formulario existe en la aplicación, pero quisiera referenciarlo por el nombre. Todo esto viene motivado por tener una lista de formularios en una bbdd con sus privilegios para los distintos usuarios, y no tener que hacer un select case con el nombre del formulario... algo asi:
select case NombreFormulario
select case NombreFormulario
joer, que lo dejo a medias...decia:
Select case NombreFormulario
Case "Form1"
Form1.show
Case "Form2"
Form2.show
etc..
Ya que son un monton de formularios, y ademas, el engorro de tener que modificar la funcion cada vez que se añada o quite alguno....
No se si me he explicado
Gracias por adelantado
Select case NombreFormulario
Case "Form1"
Form1.show
Case "Form2"
Form2.show
etc..
Ya que son un monton de formularios, y ademas, el engorro de tener que modificar la funcion cada vez que se añada o quite alguno....
No se si me he explicado
Gracias por adelantado
Hola,
Es esto lo que necesitas???
Dim nombreFormulario As String
Dim f As Form
nombreFormulario = "Form3"
Select Case nombreFormulario
Case "Form2"
Set f = Form2
Case "Form3"
Set f = Form3
Case "Form4"
Set f = Form4
End Select
f.Show
Salu2
sdemingo
http://boards.melodysoft.com/sdemingo
Es esto lo que necesitas???
Dim nombreFormulario As String
Dim f As Form
nombreFormulario = "Form3"
Select Case nombreFormulario
Case "Form2"
Set f = Form2
Case "Form3"
Set f = Form3
Case "Form4"
Set f = Form4
End Select
f.Show
Salu2
sdemingo
http://boards.melodysoft.com/sdemingo
gracias por tu interés sdemingo :)
No es exactamente eso, ya que lo que precisamente quiero evitar es el select... por cierto, investigando he descubierto una cosa que a mi me parece muy interesante. Se trata del objeto VBA, que aún no conozco bien, pero parece que tiene las colecciones de los proyectos, de las ventanas, de los forms... de todo. Pero para poder usarlo, que es lo que a mi me faltaba, y en la documentacion del MSDN no he visto, es activar la referencia "Microsoft Visual Basic For Aplications Extensibility"... cuando sepa algo más del tema, os lo escribo. De todas formas, si alguien sabe algo sobre este tema, agradecere indicaciones.
Muchas gracias a todos
No es exactamente eso, ya que lo que precisamente quiero evitar es el select... por cierto, investigando he descubierto una cosa que a mi me parece muy interesante. Se trata del objeto VBA, que aún no conozco bien, pero parece que tiene las colecciones de los proyectos, de las ventanas, de los forms... de todo. Pero para poder usarlo, que es lo que a mi me faltaba, y en la documentacion del MSDN no he visto, es activar la referencia "Microsoft Visual Basic For Aplications Extensibility"... cuando sepa algo más del tema, os lo escribo. De todas formas, si alguien sabe algo sobre este tema, agradecere indicaciones.
Muchas gracias a todos
si he leido tu llamado en la respuesta a Laura, y de hecho lo seguí buscando.
Lo único que he encontrado que podría haber sido relevante fué la función CallByName del objeto VBA, que hace exactamente lo que necesitabas, acceder a las propiedades y métodos usando Strings, PERO, sólo usando el String para las propiedades y los métodos, no para hacer referencia al objeto en sí.
O sea, se puede hacer
Dim Instruccion As String
Instruccion = "show"
VBA.CallByName Form3, Instruccion, VbMethod 'para mostrar el fomulario
MsgBox VBA.CallByName(Form3, "visible", VbGet) 'para saber si está visible
Pero continua necesitando el parámetro de tipo Object, del que no existe una función de conversión.
Creo que no te quedará más remedio que usar el Select Case : (
Lo único que he encontrado que podría haber sido relevante fué la función CallByName del objeto VBA, que hace exactamente lo que necesitabas, acceder a las propiedades y métodos usando Strings, PERO, sólo usando el String para las propiedades y los métodos, no para hacer referencia al objeto en sí.
O sea, se puede hacer
Dim Instruccion As String
Instruccion = "show"
VBA.CallByName Form3, Instruccion, VbMethod 'para mostrar el fomulario
MsgBox VBA.CallByName(Form3, "visible", VbGet) 'para saber si está visible
Pero continua necesitando el parámetro de tipo Object, del que no existe una función de conversión.
Creo que no te quedará más remedio que usar el Select Case : (
si, lo comprendo, pero el problema es no poder acceder por la colección Forms
Lo ideal sería que hubiera una función de conversión, como CStr(), CDbl(), que conviertiera el string en objecto Form, pero desgraciadamente creo que VB no contempló esa posibilidad : (
A mi sólo se me ocurre usar el Select Case, aunque tenga el inconveniente que te presenta.
De todas formas cabe esperar a que alguien sepa algún "truquillo".
Lamento no poder ayudar. Un saludo.
Lo ideal sería que hubiera una función de conversión, como CStr(), CDbl(), que conviertiera el string en objecto Form, pero desgraciadamente creo que VB no contempló esa posibilidad : (
A mi sólo se me ocurre usar el Select Case, aunque tenga el inconveniente que te presenta.
De todas formas cabe esperar a que alguien sepa algún "truquillo".
Lamento no poder ayudar. Un saludo.
Muchas gracias de nuevo por tu interés Enço. Buscando en la ayuda del MSDN, me he encontrado que hace referencia al objeto VBE, que se supone tiene colecciones para acceder a los proyectos del VB, sus ventanas y no se cuantas cosas más. De hecho, me sale en la ayuda de los temas del VB6, pero chico, no se si me falta alguna referencia en el proyecto o algo asi, por que el visual basic no me reconoce ese objeto.... si eso te da una pista sobre algo más que sepas
Gracias
Gracias
Hellow..como estan...este codigo lo vi en la pagina del guille
www.guille.info.net
okas
sub loadform(byval NameForm as string)
Dim f As Form
'valida si ya ta cargao px
For Each f In Forms
If f.Name = NameForm Then
Exit Function
End If
Next
Set f = Forms.add(NameForm)
f.Show
end sub
me funciona okas en VB6.0
www.guille.info.net
okas
sub loadform(byval NameForm as string)
Dim f As Form
'valida si ya ta cargao px
For Each f In Forms
If f.Name = NameForm Then
Exit Function
End If
Next
Set f = Forms.add(NameForm)
f.Show
end sub
me funciona okas en VB6.0
