2012-07-02 18 views
5

मैं आउटलुक प्रोग्रामिंग करने के लिए नया हूँ पहला कदम (अधिक बाद में उन्नत) के बाद काम नहीं है के लिए बहुत:आउटलुक में इंस्पेक्टर विंडो रिबन का उपयोग कैसे करें?

  • एक नया रिबन बनाएँ (Ribbon1) टैब (खोजकर्ता और नए निरीक्षकों में दिखाया जाना चाहिए)
  • जब चुनें (अन्वेषण) या खोलने (इंस्पेक्टर) एक मेल रिबन टैब मेल का विषय दिखाया जाना चाहिए (के रूप में परीक्षण करने के लिए उल्लेख किया है)

एक्स्प्लोरर भाग चलते रहने के लिए काफी आसान था, लेकिन मेरे पास है नए इंस्पेक्टो के लिए ऊपर की समस्याएं रु

मैं विभिन्न दृष्टिकोण, लेकिन कोई भी कोशिश की है काम करने के लिए लग रहे हैं:

  • मैं Globals.Ribbons [निरीक्षक] .Ribbon1 संदर्भ के लिए NewInspector में की कोशिश की है, लेकिन वह हमेशा रिक्त है

  • मैंने न्यूइंसेप्टर में सक्रिय ईवेंट की सदस्यता लेने की कोशिश की है और वहां से ऐसा किया है लेकिन वहां एप्लिकेशन.एक्टिव इंस्पेक्टर() शून्य है और यदि मैं इंस्पेक्टर की वैश्विक प्रतिलिपि न्यूइंस्पेक्टर घटना से संग्रहीत करता हूं तो यह काम नहीं करता है पहला नया इंस्पेक्टर (केवल दूसरे और पढ़ने के बाद मेल पर। मैं रिबन लोड घटना का उपयोग करने की कोशिश की है लेकिन यह है कि केवल पहली बार होता है चिट्ठी लिखें पर नहीं)

  • मैं Globals.Ribbons.Ribbon1 सदस्य का उपयोग करने की कोशिश की है, लेकिन केवल के लिए काम करते हैं कि पहली बार

(मैंने पाया NewInspector के नमूने लेकिन कोई नहीं के बहुत सारे कोई जवाब देखते हैं कि और के लिए यह एक https://stackoverflow.com/questions/7852017/outlook-2007-ribbon-object-reference-not-set-to-an-instance-of-an-object के अलावा अन्य रिबन को संशोधित करना चाहते करने लगते हैं)

यह मैं गाड़ी चला रहा है पागल ... है इस तरह के एक साधारण काम करने के लिए वास्तव में कोई रास्ता नहीं है !? संदर्भ

void InspectorsNewInspector(Outlook.Inspector inspector) 
    { 
     AddInspectorEventHandlers(inspector); 
    } 

    private void AddInspectorEventHandlers(Outlook.Inspector inspector) 
    { 
     if (inspector == null) 
     { 
      return; 
     } 

     Ribbon1 ribbon1 = Globals.Ribbons[inspector].Ribbon1; //This always return null!!! 

     ((Outlook.InspectorEvents_10_Event)inspector).Activate += InspectorActivate; 
     ((Outlook.InspectorEvents_10_Event)inspector).Close += InspectorClose; 

     _openInspectors.Add(inspector); 
    } 
+0

शेयर आप कैसे ऊपर तार 'InspectorsNewInspector' के लिए अपने स्रोत है उपयोग करने के लिए पता है। संपूर्ण एडइन क्लास संदर्भ के लिए फायदेमंद होगा। – SliverNinja

उत्तर

0

के लिए

नमूना कोड 'NewInspector' घटना के दौरान, आपका कस्टम रिबन यह लोड नहीं है। यदि आप कोड डीबग करते हैं, तो आप देखेंगे कि यह केवल 'न्यू इंस्पेक्टर' ईवेंट के बाद है जो कस्टम रिबन डिजाइनर के पास जाता है। कस्टम रिबन लोड इवेंट के दौरान आपको जो चाहिए वह लागू करने के लिए आप क्या कर सकते हैं। यही कारण है कि

private void MyRibbon_Load(object sender, RibbonUIEventArgs e){} 

आप मौजूदा सक्रिय निरीक्षक मिल सकता है यहाँ पर। और उस से आप जिस वस्तु को चाहते हैं उसे प्राप्त कर सकते हैं।

पूर्व:

 Inspector inspector = Globals.WPTAddIn.Application.ActiveInspector(); 
     if (inspector != null) 
     { 
      if (inspector.CurrentItem != null) 
      { 
       if (inspector.CurrentItem is MeetingItem) 
       { 
        MeetingItem meetingItem = (MeetingItem)inspector.CurrentItem;}}} 
0

मैं आज एक ही समस्या में चलाने के लिए और एक समाधान के साथ आया है। मैं मूल रूप से MailItem के Ribbon तक पहुंचने का प्रयास कर रहा हूं जिसे मैंने अभी बनाया है।

इसे काम करने के लिए मैंने Globals.Ribbons में प्रत्येक रिबन पर लूप किया है (इंस्पेक्टर इंडेक्सर का उपयोग किए बिना, क्योंकि यह आपको एक शून्य संदर्भ देता है)। प्रत्येक Ribbon ऑब्जेक्ट के साथ, मैं इसका संदर्भ जांचता हूं जो Inspector प्रकार है।मैं Inspector.CurrentItem पर एक समानता जांच कर सकता हूं यह निर्धारित करने के लिए कि उनके संदर्भ बराबर हैं या नहीं। वे बराबर हैं मुझे लगता है कि Ribbon

यहाँ एक टुकड़ा

Outlook.MailItem mail = (Outlook.MailItem)this.Application.CreateItem(Outlook.OlItemType.olMailItem); 
Outlook.Inspector currentInspector = (Outlook.Inspector)mail.GetInspector; 

Ribbon2 currentRibbon = null; 
foreach (Ribbon2 ribbon in Globals.Ribbons) 
{ 
    var ribbonInspector = (Outlook.Inspector)ribbon.Context; 
    if (ribbonInspector.CurrentItem.Equals(currentInspector.CurrentItem)) 
    { 
     currentRibbon = (Ribbon2)ribbon; 
     break; 
    } 
} 
संबंधित मुद्दे