2010-09-21 18 views
5

बनाएं मैं एक दस्तावेज़ (14) उदाहरण बना रहा हूं जिसमें एक दस्तावेज़ के साथ काम करने के लिए C# .net4 Winforms एप्लिकेशन से इंटरऑप के साथ एक शब्द बना रहा है। यदि मेरे आवेदन से परे कुछ शब्द दस्तावेज़ खोले जाते हैं तो वही शब्द उदाहरण मेरे आवेदन को परेशान करेगा।अनन्य शब्द उदाहरण

सरल प्रश्न: क्या मेरे शब्द के लिए मेरे शब्द उदाहरण को सेट करने का कोई तरीका है?

अग्रिम धन्यवाद।

बीटीडब्ल्यू: अनन्य/शब्द/कार्यालय/पृथक/ब्लॉक/उदाहरण के साथ कुछ सामान मिला लेकिन किसी भी तरह से कोई जवाब नहीं मिला।

+1

मुझे उस पर एक जवाब देखना अच्छा लगेगा:> – naacal

+0

शब्द के व्यवहार को बदलने से उपयोगकर्ता * बहुत * भ्रमित हो जाएंगे। आप कौनसी समस्याएं हल करने की कोशिश कर रहे हैं? – egrunin

+0

जैसा कि मैंने वर्णन किया है, उपयोगकर्ता और एप्लिकेशन को प्रत्येक शब्द का एक अलग उदाहरण प्राप्त करना चाहिए। लेकिन यदि उपयोगकर्ता एक दस्तावेज़ खोलता है (डॉक्स पर डबल क्लिक करें) जबकि एप्लिकेशन एक छिपे हुए शब्द उदाहरण में काम कर रहा है, तो इस दस्तावेज़ में उपयोगकर्ता दस्तावेज़ खोला जाएगा और इस उदाहरण में मेरे ऑपरेशन को क्रैश कर देगा क्योंकि सक्रिय दस्तावेज़ बदलता है। – Gpx

उत्तर

6

एक समाधान है, लेकिन यह सुंदर नहीं है। मुख्य मुद्दा यह है कि शब्द स्वयं आरओटी (रनिंग ऑब्जेक्ट टेबल) में पंजीकृत होता है, और अन्य अनुप्रयोगों को आसानी से आरओटी में पंजीकृत वर्ड के उदाहरण तक पहुंच प्राप्त हो सकती है (उदाहरण के लिए वीबी गेटऑब्जेक्ट फ़ंक्शन क्या करता है)।

तो, अपने अनुप्रयोग में, आप मूल रूप से करने के लिए 2 बातें

  1. GetObject करने की कोशिश करो होगा (यानी एक चल इंस्टेंस के लिए ROT क्वेरी)
  2. कि इन्हें पाने के हैं, तो आप जानते हैं कि आपके पास वर्ड का उपयोग करने के लिए वर्ड का एक नया उदाहरण बनाने के लिए (CreateObject वीबी में, प्रक्रिया अन्य लैंग्स में अलग है)।
  3. यदि आपको कोई नहीं मिलता है, तो आपको Word के 2 नए उदाहरण बनाना होगा। पहला स्वचालित रूप से आरओटी में खुद को पंजीकृत करेगा, दूसरा नहीं होगा। दूसरा उदाहरण, और काफी पहले उदाहरण का प्रयोग करें।

हालांकि आपको लगता है कि पहले उदाहरण समाप्त कर दें, यह "पूर्वव्यापी प्रभाव से" खुद ROT में रजिस्टर नहीं करेगा, और अन्य अनुप्रयोगों के आम तौर पर यह करने के लिए एक संदर्भ वस्तु का उपयोग नहीं होगा, वे स्वतः एक नया उदाहरण बना देंगे, जो, चूंकि अब आरओटी में कोई अन्य उदाहरण पंजीकृत नहीं है, तब पंजीकृत हो जाएगा।

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

+0

यह बहुत उपयोगी था! –

5

नहीं, आपके लिए केवल शब्द के उदाहरण को लॉक करने का कोई तरीका नहीं है।

लेकिन, आपकी टिप्पणी के आधार पर, इस मुद्दे के आसपास काम करना आसान है - ActiveDocument का उपयोग न करें। आप दस्तावेज़ को कुछ विशिष्ट कॉल करके और फिर उस चर का उपयोग करके ActiveDocument का उपयोग करके प्राप्त कर सकते हैं (चाहे आप मौजूदा दस्तावेज़ खोल रहे हों या नया बना रहे हों)।

उदाहरण के लिए:

Sub NewDoc() 
    Dim d As Document 
    Set d = Documents.Add(Visible:=False) 
End Sub 
Sub ExistingDoc() 
    Dim d As Document 
    Set d = Documents.Open(FileName:="C:\myexisting.doc") 
End Sub 

ऊपर दोनों ही मामलों में, तुम बस जहां ActiveDocument का उपयोग करते थे के स्थान पर d का उपयोग करेंगे।

+0

धन्यवाद ओटाकू, लेकिन यह मेरा ऐप नहीं है जो दूसरा दस्तावेज़ खोल रहा है। मैं अपने शब्द हैंडलिंग के साथ ठीक हूं, लेकिन मेरे ऐप के बाहर एक उपयोगकर्ता एक शब्द दस्तावेज़ खोलने की कोशिश कर रहा है और सिस्टम स्वचालित रूप से मेरे आविष्कार उदाहरण का उपयोग करेगा। तो मैं सिर्फ मेरे लिए अपना उदाहरण ब्लॉक करना चाहता हूं और उपयोगकर्ता को एक नया उदाहरण मिलना चाहिए। – Gpx

+0

@ जीपीएक्स: तो उपयोगकर्ता द्वारा खोला गया दूसरा दस्तावेज़ भी अदृश्य खोल रहा है (यानी वे अपना दस्तावेज़ नहीं देख सकते हैं)? –

+0

नहीं, दूसरा दस्तावेज़ सक्रिय दस्तावेज़ के रूप में नए दस्तावेज़ के साथ दिखाई देने वाला मेरा मौजूदा उदाहरण खोल रहा है। तो मेरा ऐप उदाहरण के साथ बातचीत करने का प्रयास कर रहा है लेकिन गलत दस्तावेज़। तो मैं या तो एक नया दस्तावेज़ खोलने से अपना शब्द उदाहरण रोकने या दूसरे उदाहरण में हमेशा दस्तावेज़ खोलने का विकल्प सेट करने का प्रयास करूंगा। – Gpx

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