2010-08-25 21 views
5

Tengo una aplicación C# Winforms que usa la clase HelpProvider. Cada vez que presiono F1 para abrir la ayuda, la ventana de ayuda siempre estará en la parte superior de mi aplicación, no puedo llevar mi UI de aplicación al primer plano. Todavía puedo interactuar con mi interfaz de usuario, pero la ventana de ayuda se mantendrá en la parte superior.Utilizando la clase HelpProvider para mostrar ayuda, la interfaz de usuario siempre está detrás de la ventana de ayuda

¿Es esto por diseño de HelpProvider? ¿O me estoy perdiendo algo?

+0

Por diseño, el usuario quiere leer la ayuda. –

+1

@ Hans Passant, sí, pero ¿qué sucede si el usuario desea volver al programa para hacer lo que dice la ayuda, pero no puede porque la ventana de ayuda está en el camino? –

+0

Ella lo arrastrará fuera del camino o lo cerrará. Asegúrate de no comer demasiado espacio en la pantalla. –

Respuesta

2

De hecho, es por diseño, y es algo de lo que no me di cuenta. Acabo de recompilar mi proyecto de último año y lo confirmé. He leído sobre esto y, básicamente, el archivo de ayuda está configurado en TopMost = True cada vez que se hace clic en el formulario. Esto significa que incluso si codifica su formulario para que sea TopMost, tan pronto como haga clic en el archivo de ayuda volverá a estar en la parte superior.

Creo que si utiliza el proceso de inicio, debe evitar el problema por la pérdida de personalización del proveedor de ayuda.

private void textBox1_KeyDown(object sender, 
System.Windows.Forms.KeyEventArgs e) 
{ 
    if(e.KeyCode ==Keys.F1) 
    { 
    System.Diagnostics.Process.Start(@"C:\WINDOWS\Help\mspaint.chm"); 
    } 
} 

creo que sirve

6

Hay una solución a este problema, un poco sucio, pero funciona. El caso es que la ventana de ayuda abierta por HelpProvider está siempre en la parte superior de su control de ventana parent, que está determinada por la instancia Control en el primer parámetro de Help.ShowHelp. Incluso si especifica null ahí, el formulario de solicitud principal se sigue utilizando como ventana primaria. Para evitar esto, se puede crear una forma ficticia, que se utilizará como formulario principal de ayuda. Este formulario nunca se mostrará, pero aún así, la ventana de ayuda estará "en la parte superior" de él, efectivamente NO estará en la parte superior de todas las demás ventanas de la aplicación.

public static class AppHelp 
{ 
    private static Form mFrmDummyHost = new Form(); 

    public static void ShowChm() 
    { 
     Help.ShowHelp(mFrmDummyHost, "my_help.chm"); 
    } 
} 

Por supuesto, todos los demás Help.ShowHelp sobrecargas se pueden llamar de esta manera también.

Esperanza esto ayuda a la gente como yo, en busca de respuestas a preguntas que nunca conseguir de edad;)

+1

Gracias por dar una respuesta que aún habilita las características de Context Sensitive del proveedor de ayuda. –

Cuestiones relacionadas