2013-04-17 4 views
6

मैं अपने स्वयं के रिबन टैब के साथ एक वर्ड एड-इन विकसित कर रहा हूं। मेरे अधिकांश वास्तविक कोड में कुछ सेवा वर्गों में शामिल है जो इसAddIn_Startup में प्रारंभ किए गए हैं और यह AddAddIn सिंगलटन ऑब्जेक्ट के गुणों को असाइन किया गया है। मेरे पास एक ईवेंट श्रोता भी है जो क्लिपबोर्ड घटनाओं के लिए सुनता है जिसे मैं उसी कोड की संपत्ति के रूप में शेष कोड में बेनकाब करना चाहता हूं।कस्टम रिबन इस AddIn_Startup से पहले लोड किया गया है, लेकिन मैं वहां कुछ चीजों को प्रारंभ करना चाहता हूं - सर्वोत्तम समाधान?

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

इस मुद्दे पर सबसे अच्छा समाधान क्या है? मैं तो बस इन बातों ThisAddIn के स्थिर सदस्यों के सभी कर सकते हैं और उन्हें एक स्थिर निर्माता में प्रारंभ, लेकिन यह गलत लगता है और यह भी एक स्टार्टअप घटना (या एक सिंगलटन वस्तु) होने के पूरे मुद्दे को नष्ट कर देता। तो लोड घटना स्टार्टअप के बाद निकाल दिया -

अजीब तरह, मैं मूल रूप से इस समस्या को जब मेरे रिबन बस में निर्मित ऐड-में टैब पर उसके घटकों को जोड़ने था नहीं था।

(नोट: मैं दृश्य स्टूडियो 2012 में यह सब कर रहा हूँ और रिबन डिजाइनर का उपयोग कर।)

उत्तर

5

इस उद्देश्य मैं अधिभावी कर रहा हूँ BeginInit विधि के लिए। मेरे अनुभव की घटनाओं से क्रम में occure (रिबन/संबंधित आरंभीकरण):

  1. CreateRibbonExtensibilityObject
  2. BeginInit
  3. GetCustomUI
  4. Ribbon_Load
  5. ThisAddIn_Startup
1

मैं के समाधान का परीक्षण किया है tinamou, यह अब और काम नहीं करता है। Ribbon_load वास्तव में BeginInit के बाद हुआ लेकिन इस चरण में रिबन ठीक और केवल पढ़ने के लिए है। समूह बटन जोड़ने का कोई तरीका नहीं है .. (हालांकि गतिशील मेनू को संशोधित करना संभव है)।

मुझे लगता है कि सबसे अच्छा तरीका (स्थिर) कई समूहों को प्रीलोड करना है .. और visibility का उपयोग करने के लिए गतिशील रिबन प्राप्त करने के लिए नियंत्रण की संपत्ति का उपयोग करना है।

यह पोस्ट भी देखें localize VSTO addin according to the language of the office product, ऐसा लगता है कि CreateRibbonExtensibilityObject यादृच्छिक समय पर ट्रिगर किया गया है।

+2

मैं वास्तव में ऊपर या तो अब और स्वीकार किए जाते हैं जवाब का उपयोग नहीं करते। (क्या उचित अतः इसके जवाब है? मैं एक नया जोड़ना चाहिए और स्वीकार करते हैं के लिए कदम?) मुझे क्या Ribbon.Designer.cs में निर्माता को संपादित एक विधि "ManualInitialize" कॉल करने के लिए है। इस कोड में वह सब कुछ शामिल है जो ThisAddIn_Startup पर निर्भर नहीं है। मैं तो उस ThisAddIn_Startup से पुकारा जाता है Ribbon.cs "FinalStartup" में एक और तरीका सब कुछ है कि * है * ThisAddIn_Startup पर निर्भर होता है कि जोड़ें। –

+0

मुझे लगता है कि आपको स्वीकृत उत्तर को हटा देना चाहिए और अपने प्रश्न को अनुत्तरित होने देना चाहिए। शायद किसी को एक बेहतर तरीका मिल जाएगा। – Malick

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