2009-04-27 16 views
6

किसी को भी यह देखने का तरीका पता है कि वीएसटीओ परियोजना की एक्सेल विंडो सक्रिय/फोकस में है या नहीं?वीएसटीओ: आवेदन फोकस

मैं System.Windows.Window.IsActive के बराबर की तलाश में हूं।

उत्तर

7

मैं इसके साथ भी निराश हूं। क्या आप वीएसटीओ ऐप में एक संवाद का उपयोग कर रहे हैं?

//... 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; 

} 

मैं: यदि हां, तो क्या मैंने किया है के रूप में इस कार्यालय आवेदन को सक्रिय करने के लिए Windows प्रपत्र/संवाद के समापन में कोई ईवेंट जोड़ें (उदाहरण के पद के साथ है, इसलिए वहाँ Excel में अंतर हो सकता है) है पाया है इस लाइन हमेशा/सच रिटर्न निहित है:

this.ActiveWindow.Active() 

लेकिन इस (सक्रिय विंडो का ट्रैक रखने के वैश्विक bool चर "AppActive") बेहतर काम करता है:

//... 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

अच्छा समाधान माइक, महान काम। मुझे लगता है कि ActiveWindow.Active संपत्ति हमेशा सच होनी चाहिए, अन्यथा यह सक्रिय विंडो नहीं है? –

2

this.ActiveWindow.Activate() है वह विधि जो विंडो को सक्रिय करती है।

this.ActiveWindow.Active वह संपत्ति है जो आपको विंडो की स्थिति बताती है।

संबंधित मुद्दे