¿Usar el identificador de formulario en una clase vb.net sin pasarlo como argumento?

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.

preguntado el 03 de mayo de 12 a las 21:05

2 Respuestas

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

+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

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 or haz tu propia pregunta.