2009-11-27 8 views
6

Actualmente estoy creando un módulo de impresión silenciosa. El control actual que estoy usando es, se está asegurando de que la palanca de control ya esté creada (IsHandleCreated). Hice todo para engañar a esto sin suerte.Fuerza crear mango para el Control

¿Tiene ideas en mente sobre cómo puedo crear un identificador para el control sin mostrar ninguna en la pantalla?

Respuesta

4

intente sobrecargar CreateParams propiedad de captador. En él borre la bandera WS_VISIBLE.

+1

He encontrado que this.CreateHandle(); funciona realmente bien (desde dentro del formulario) – NewfrontSolutions

0

que resolvieron este problema molesto mango creación por la configuración de la WS_VISIBLE de CreationParams. Puede anular la propiedad CreationParams de Control o llamar al método CreateHandle con la instancia CreateParams adecuada. Consulte el link

19

Tiene que acceder a la propiedad Manejar (ponga el resultado en una variable ficticia o algo así). Mire en Reflector; fuerza la creación de la manija.

+0

Ha, funciona. ¡Buen consejo! –

+0

¡Gracias! Que funciona como encanto :) – Mnyikka

2

he tenido el mismo problema con algunos otros controles y se utiliza el método de Control.CreateControl():

private void CheckForExistingHandle(Control control) 
{ 
    if (!control.IsHandleCreated) 
     control.CreateControl(); 
} 

pero no saben cómo funciona con un módulo de impresión.

+5

Asegúrese de que la propiedad visible del control se establece en true, o no se creará el mango de un 'CreateControl()' llamada. Consulte http://msdn.microsoft.com/en-us/library/system.windows.forms.control.createhandle%28v=VS.90%29.aspx para obtener más información. – Drahakar

+0

@Drahakar Esa es una nota muy buena: 'CreateControl' podría elegir no crear el control. La solución que se menciona en MSDN es acceder a la propiedad '.Handle' –

0

Calling CreateHandle método privado va a hacer el trabajo.

MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance); 
ch.Invoke(frm, new object[0]); 
Cuestiones relacionadas