2012-10-01 12 views
5

पर नहीं निकाल दिया गया है, न तो नया दस्तावेज़ और न ही जब दस्तावेज़ वर्ड लोड होता है तो दस्तावेज़ ओपन ईवेंट निकाल दिया जाता है। जब Word का एक उदाहरण पहले से खुला है और एक नया या मौजूदा दस्तावेज़ खोला गया है तो ये घटनाएं ठीक हो जाती हैं।वर्ड डॉक्यूमेंट चेंज इवेंट को कैसे संभालें क्योंकि न्यू डॉक्यूमेंट इवेंट लोड

मैंने जो सुझाव देखा है वह है कि अन्य दो घटनाओं के बजाय DocumentChange ईवेंट (जिसे Word लोड होने पर हमेशा निकाल दिया जाता है) को संभालना है।

मेरा सवाल यह है कि मैं इसके बारे में कैसे जाऊं? दस्तावेज़ चेंज ईवेंट में कोई पैरामीटर नहीं है, तो मुझे कैसे पता चलेगा कि दस्तावेज़ (नया या मौजूदा) अभी खोला गया था?

इसके अतिरिक्त, मेरे पास पहले से ही दस्तावेज़ चेंज ईवेंट में तर्क है और नए और मौजूदा दस्तावेज़ों के लिए प्रसंस्करण अलग है इसलिए मैं अपने सभी कोड को ईवेंट में फेंक नहीं सकता।

private void ThisAddIn_Startup(object sender, System.EventArgs a) 
{ 
    this.Application.DocumentChange += new ApplicationEvents4_DocumentChangeEventHandler(Application_DocumentChange); 
} 

private void Application_DocumentChange() 
{ 
    // How do I handle NewDocument or DocumentOpen? 
} 

उत्तर

2

तो मैंने इस AddddIn_Startup में लोड किए गए दस्तावेज़ को संसाधित करना समाप्त कर दिया। यदि दस्तावेज़ का पथ एक खाली स्ट्रिंग है, तो हम जानते हैं कि दस्तावेज़ नया है और स्थानीय मशीन पर कभी भी सहेजा नहीं गया है। अन्यथा, मुझे पता है कि यह सहेजा गया है (अस्थायी निर्देशिका सहित) और मैं इसे एक मौजूदा दस्तावेज़ के रूप में संसाधित करता हूं।

private void ThisAddIn_Startup(object sender, System.EventArgs a) 
{ 
    try 
    { 
    Word.Document doc = this.Application.ActiveDocument; 
    if (String.IsNullOrWhiteSpace(doc.Path)) 
    { 
     ProcessNewDocument(doc); 
    } 
    else 
    { 
     ProcessDocumentOpen(doc); 
    } 
    } 
    catch (COMException e) 
    { 
    log.Debug("No document loaded with word."); 
    } 

    // These can be set anywhere in the method, because they are not fired for documents loaded when Word is initialized. 
    ((MSWord.ApplicationEvents4_Event)this.Application).NewDocument += 
    new MSWord.ApplicationEvents4_NewDocumentEventHandler(Application_NewDocument); 
    this.Application.DocumentOpen += 
    new MSWord.ApplicationEvents4_DocumentOpenEventHandler(Application_DocumentOpen); 
} 

Deni के जवाब राज्यों के लिए मेरी टिप्पणी के रूप में: ThisAddIn.Desiger.cs के प्रारंभ में DocumentOpen ईवेंट हैंडलर स्थापना() विधि मौजूदा दस्तावेज़ों के लिए काम किया है, लेकिन जब पद खोलता NewDocument प्रारंभ नए दस्तावेज़ के लिए कहा जाता है, तो यह समाधान काम नहीं किया। इसलिए मैंने TheAddIn_Startup ईवेंट में DocumentOpen और NewDocument की सेटिंग छोड़ दी, अन्यथा जब दस्तावेज़ दस्तावेज़ के साथ लोड होता है तो दस्तावेज़ ओपन निकाल दिया जाएगा।

2

This लिंक आपकी मदद करेगा, मूल रूप से क्या वे कहते हैं ThisAddIn_Startup चलाता है कि के बाद DocumentOpen घटना चलना समाप्त कर दिया है। समस्या के लिए एक कामकाज भी है हाइपरलिंक का पालन करें।

+0

यह _DocumentOpen के लिए पूरी तरह से काम करता है लेकिन _NewDocument के लिए काम नहीं करता है। मुझे कहीं याद है कि _NewDocument केवल तभी निकाल दिया जाता है जब कोई उपयोगकर्ता फ़ाइल-> नया करता है और जब Word किसी नए दस्तावेज़ के साथ खुलता है। यदि यह सत्य है, तो शब्द खुलने पर नए दस्तावेज़ को कैसे संभालना है, इस पर कोई विचार है? _Window सक्रिय रूप से आग लगती है शब्द वर्ड लाभ केंद्रित करता है, न केवल पहली बार शब्द खुलता है। तो मैं _WindowActivate को संभालने का प्रयास कर सकता था लेकिन मुझे लगता है कि यह गन्दा हो सकता है। विचार? –

1

मैंने अपने ऐड-इन लोड से पहले सभी दस्तावेज़ों को अस्तित्व में खोजने के लिए स्टार्टअप हैंडलर में एप्लिकेशन। दस्तावेज़ संग्रह का उपयोग किया है। यह वही काम पूरा करता है जो आपका जवाब करता है, साथ ही, यदि आप किसी भी कारण से बाद में ऐड-इन मांग (शब्द शुरू होने के बजाए) लोड करते हैं, तो संग्रह को गणना करना केवल सक्रिय दस्तावेज़ से अधिक हो सकता है।

जब भी ActiveDocument बदलता है तो DocumentChange() ईवेंट आग लगती है। शब्द में केवल एक सक्रिय दस्तावेज़ होता है। कई खुले शब्द दस्तावेज़ों के बीच स्विचिंग घटना को आग लग जाएगी। साथ ही, दस्तावेजों को बंद करते समय, घटना आग लग सकती है क्योंकि एक और खुला दस्तावेज़ सक्रिय हो जाता है। आखिरी दस्तावेज बंद होने के बाद भी यह आग लगती है, इस मामले में, एप्लीकेशन.एक्टिव डॉक्यूमेंट अमान्य होगा।

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