2009-04-27 18 views

Respuesta

7

Me he sentido frustrado con esto también. ¿Estás usando un diálogo en la aplicación VSTO? Si es así, lo que he hecho es añadir un evento para el cierre de un formulario Windows/Dialog para activar la aplicación de Office de la siguiente manera (ejemplo es la palabra, lo que puede haber diferencias en Excel):

//... VSTO Startup Event 
WindowsForm form = new WindowsForm(); 
form.FormClosed += new FormClosedEventHandler(form_FormClosed); 
form.Show(); 


void form_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    this.Application.Activate();   
    this.Application.ActiveWindow.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateNormal; 

} 

I han encontrado esta línea siempre miente/devuelve true:

this.ActiveWindow.Active() 

Pero esto funciona mejor (variable global bool "AppActive" para realizar un seguimiento de la ventana activa):

//... VSTO Startup Event  
this.Application.WindowDeactivate += new Microsoft.Office.Interop.Word.ApplicationEvents4_WindowDeactivateEventHandler(Application_WindowDeactivate); 
this.Application.WindowActivate += new Microsoft.Office.Interop.Word.ApplicationEvents4_WindowActivateEventHandler(Application_WindowActivate); 

    void Application_WindowActivate(Microsoft.Office.Interop.Word.Document Doc, Microsoft.Office.Interop.Word.Window Wn) 
    { 
     AppActive = true; 
    } 

    void Application_WindowDeactivate(Microsoft.Office.Interop.Word.Document Doc, Microsoft.Office.Interop.Word.Window Wn) 
    { 
     AppActive = false; 
    } 
+1

buena solución Mike, buen trabajo. Sin embargo, siento que esa propiedad ActiveWindow.Active siempre DEBE devolver verdadero, de lo contrario no es la ventana activa ¿verdad? –

2

this.ActiveWindow.Activate() es el método que activa la ventana.

this.ActiveWindow.Active es la propiedad que le indica el estado de la ventana.

Cuestiones relacionadas