2011-04-25 6 views
9

मैं वर्ड 2007 ऐप-लेवल ऐड-इन पर काम कर रहा हूं। अब तक, मुझे एड-इन के रिबन इंटरफेस को एक्सएमएल में परिवर्तित करने के अलावा प्रमुख बाधाओं का अनुभव नहीं हुआ है। मुझे रिबन एक्सएमएल का उपयोग करना है क्योंकि जिस सुविधा पर मैं काम कर रहा हूं वह केवल इस तरह से किया जा सकता है। समस्या यह है कि रिबन एक्सएमएल में स्विच करके मैं ग्लोबल्स के माध्यम से रन टाइम पर इंटरफ़ेस तक नहीं पहुंच सकता। रिबन। यह लिंक http://msdn.microsoft.com/en-us/library/bb772088.aspx एक अच्छा काम करता है जो एक विज़ुअल डिज़ाइनर रिबन तक पहुंचने का तरीका बताता है लेकिन यह पूरी तरह से एक्सएमएल रिबन मामले को अनदेखा करता है। विशेष रूप से, मुझे लेबल जैसे कुछ दृश्य नियंत्रणों तक पहुंचने में सक्षम होना चाहिए। इसे कैसे प्राप्त किया जा सकता है?रन समय पर रिबन (एक्सएमएल) तक पहुंचने का कोई तरीका है?

उत्तर

8

ग्लोबल्स। रिबन एक वीएसटीओ डिजाइनर सुविधा है, यदि आप रिबनबॉक्सएमएल का उपयोग करते हैं तो आपके पास यह सुविधा नहीं है। डिजाइनर वास्तव में कवर के तहत क्या करता है यह कार्यालय के लिए रिबन एक्सएमएल बनाएगा, फिर जब कार्यालय कॉलबैक करता है, तो VSTO उस संदर्भ (दस्तावेज़) के लिए उचित ईवेंट हैंडलर उठाएगा। चूंकि आप रिबन एक्सएमएल का उपयोग कर रहे हैं, आप पूरी तरह से वीएसटीओ रिबन डिजाइनर समर्थन को छोड़ रहे हैं (मैं इसे इस तरह से पसंद करता हूं, यह तेज़ है और आपके पास अधिक नियंत्रण है)।

रिबन एक्सएमएल के साथ आपको अपने लेबल के लिए ऑनलोड कॉलबैक पंजीकृत करना होगा, फिर कार्यालय आपको एक आईरिबोनकंट्रोल पास करेगा, जो लेबल होगा, और आपके पास सीमित सामग्री है जो आप कर सकते हैं। यदि आप पाठ को बदलना चाहते हैं तो मेरे सिर के ऊपर से आपको एक GetText कॉलबैक पंजीकृत करना होगा, फिर उस रिबन नियंत्रण को अमान्य कर दें, जिससे GetText कॉलबैक को पुनर्मूल्यांकन किया जाएगा।

आप वास्तव में जो हासिल करना चाहते हैं उसके बारे में अधिक जानकारी रखने के लिए आसान होगा =) मुझे लगता है कि मेरी वीएसटीओ contrib परियोजना भी आपके जीवन को और अधिक आसान बना देगा, क्योंकि यह आपको रिबन एक्सएमएल का उपयोग करते समय कई अच्छी रिबन डिजाइनर सुविधाओं देता है । लेकिन मुझे बताएं कि आप क्या करना चाहते हैं, और मैं आपको इसके बारे में अधिक जानकारी दे सकता हूं।

चीयर्स, जेक

+0

हाय जेक। जवाब के लिए धन्यवाद। मैंने वास्तव में बहुत से शोध किए क्योंकि मैंने इस प्रश्न को पोस्ट किया था और मैं उसी निष्कर्ष पर पहुंचा। मैं अभी भी उम्मीद कर रहा था कि किसी को ग्लोबल से इंटरफ़ेस तक पहुंचने का कोई तरीका मिला। रिबन। वैसे भी, मैंने वास्तव में अपना समाधान बदल दिया और अब मैं लेबल बदलने, जानकारी प्रदर्शित करने और कुछ नियंत्रणों की दृश्यता बदलने के लिए रिबनबॉक्स और कॉलबैक का उपयोग करता हूं। – AlgolDocks

+0

आपकी प्रतिक्रिया/उत्तर जेक की बहुत सराहना की जाती है। एमएसडीएन इसे कहीं भी कवर नहीं कर रहा है। नियंत्रण को अमान्य करना पूरी तरह से काम किया। – Daniel

1

जब आप Globals.ribbons तक पहुंचने का प्रयास कर रहे हैं?

जैसा कि मुझे याद है, यह शब्द के प्रारंभ चरण के अंत तक बहुत अधिक नहीं हो जाएगा।

यदि आप इसे बहुत जल्दी कोशिश करते हैं और एक्सेस करते हैं, तो अभी तक कोई रिबन परिभाषित नहीं किया जाएगा।

+0

मैं Application_DocumentOpen से Globals.Ribbons उपयोग करने के लिए समारोह जब एक नया दस्तावेज़ खोला जाता है कहा जाता हो जाता है वह यह है कि जो कोशिश कर रहा हूँ। बात यह है कि यह विजुअल डिजाइनर रिबन के लिए काम करता था। हालांकि, स्विच करने के बाद, Globals.Ribbons.Count हमेशा 0 है हालांकि एक्सएमएल रिबन प्रदर्शित होता है। – AlgolDocks

3

जब रिबन XML के साथ काम कर रहा है, मैं इस कोशिश की, लेकिन मैं Globals.Ribbons से Ribbon1 संपत्ति पर नहीं पहुंच सका .. संपत्ति सरल वहाँ नहीं था ..

हालांकि, मैं एक और समाधान के साथ आया जो मूल रूप से उचित प्रकार के कलाकारों के साथ करना था।

ThisAddIn.cs में:

private Microsoft.Office.Core.IRibbonExtensibility ribbonObj; 
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject() 
{ 
ribbonObj = new Ribbon1(this); 
return ribbonObj; 
} 

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
// Calling the public method TEST() in Ribbon1.cs 
//MyNameSpace is the namespace used in your project ie., your project name 
((MyNameSpace.Ribbon1)ribbonObj).TEST(); 
// Calling the public variable flag in Ribbon1.cs 
((MyNameSpace.Ribbon1)ribbonObj).flag; 
} 
संबंधित मुद्दे

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