¿Usar el identificador de formulario en una clase vb.net sin pasarlo como argumento?
Frecuentes
Visto 3,796 veces
0
Estoy escribiendo una clase que necesita el identificador de formulario, pero hay una forma de usarlo sin enviarlo como argumento en el constructor de la clase o en una propiedad.
Sé que el controlador no está configurado hasta que el formulario está completamente cargado, por lo que también es otro problema.
La idea básica es capturar el identificador del formulario sin pasarlo como argumento y controlar los mensajes wm.
2 Respuestas
2
No está claro qué quiere decir con 'Control de formulario' (¿El objeto de formulario en sí o la propiedad Form.Handle?).
Sin embargo, puede utilizar el My.Application.OpenForms -- (ver aquí) para recorrer todos los formularios abiertos y encontrar el que necesita sabiendo su Título o Nombre
Private Function GetFormByTitle(title as String) as Form
Dim result As Form
For Each f As Form In My.Application.OpenForms
if f.Text = title then
result = f
Exit For
End If
Next
Return result
End Function
luego podría usar el resultado de este método para tomar el 'mango' del formulario identificado:
Dim h as IntPtr
Dim f as Form
f = GetFormByTitle("Caption_Of_Form")
if f IsNot Nothing then
h = f.Handle
' .... do your work with handle here
End if
contestado el 05 de mayo de 12 a las 08:05
0
Finalmente encontré la solución que se ajustaba a mis necesidades.
http://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.createhandle.aspx
Esto me permite crear una "ventana fantasma" y obtener el controlador en el tiempo de ejecución sin modificar mi clase o pasar el controlador en el constructor o una propiedad.
Otra cosa que necesitaba era manejar los WM y esto también resuelve el problema.
Tenga en cuenta que el WM y el controlador de formulario son de la "ventana fantasma", no del formulario que aloja la interfaz.
contestado el 07 de mayo de 12 a las 02:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas vb.net winforms class handle or haz tu propia pregunta.
+1: El NUnitForms El proyecto usa lo que dijiste para permitirte acceder a los formularios por su nombre o título. Es de código abierto, por lo que puede obtener el código desde allí. - dario_ramos
No, necesito pasar el identificador de formulario. "Me.Handle" Ese es el host del identificador interno del formulario que luego me permite capturar los mensajes de la ventana. (mensajes internos del sistema operativo). Ejemplo: msdn.microsoft.com/en-us/library/… pero eso es para controles pero es el mismo principio. - Sein oxígeno
@SeinOxygen luego tome el resultado del método anterior y use ese identificador. Ver la respuesta actualizada - Steve
Entonces, ¿debería modificar la clase una y otra vez si la reutilizo en otras formas?... eso no es nada práctico. - Sein oxígeno