2010-06-11 10 views
7

लागू करता है, तो मैं वर्ड में एक वीबीए प्रोजेक्ट विकसित कर रहा हूं और किसी अन्य वर्ग को लागू करने वाली कक्षा का उपयोग करते समय ईवेंट को संभालने में समस्या का सामना करना पड़ा है।रन-टाइम त्रुटि 45 9 जब एक वर्ग के साथ WithEvents का उपयोग करते हैं जो

मैं एक खाली वर्ग को परिभाषित, IMyInterface:

Implements IMyInterface 

Public Event SomeEvent() 

Public Sub Xyz() 
    ' ... code ... 
    RaiseEvent SomeEvent 
End Sub 

Private Sub IMyInterface_Xyz() 
    Xyz 
End Sub 

अगर मैं एक तृतीय श्रेणी, OtherClass बनाते हैं तो वह एक सदस्य चर घोषित करती है:

Public Sub Xyz() 
End Sub 

Public Event SomeEvent() 

और एक वर्ग, MyClass ऊपर लागू करता है कि इंटरफ़ेस वर्ग के प्रकार के साथ:

Private WithEvents mMy As IMyInterface 

और लागू करने वर्ग का एक उदाहरण के साथ इस चर प्रारंभ करने का प्रयास करें:

Set mMy = New MyClass 

मैं एक रन-टाइम त्रुटि '459' प्राप्त: इस घटक घटनाओं के इस सेट का समर्थन नहीं करता।

MSDN page इस त्रुटि संदेश के लिए कहा गया है:

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

अप मैं क्या करने की कोशिश कर रहा हूँ। शब्दों, ऊपर काफी रकम" है कि "के बजाय" मामले स्वचालित रूप से नहीं है यह है फ्लैट आउट असंभव ", ऐसा लगता है कि काम करने के लिए मुझे कुछ मैन्युअल काम करने की ज़रूरत है, लेकिन यह मुझे नहीं बताता है! क्या किसी को पता है कि यह वीबीए में संभव है?

उत्तर

5

स्पष्ट रूप से घटनाओं को कंक्रीट क्लास में इंटरफ़ेस क्लास के माध्यम से पारित करने की अनुमति नहीं है जैसे आप "कार्यान्वयन" का उपयोग करना चाहते हैं। इस आलेख में यह कहता है: "अमूर्त इंटरफ़ेस की ईवेंट घोषणाओं को शामिल नहीं किया गया है इंटरफ़ेस जो कंक्रीट कक्षाओं द्वारा विरासत में मिला है। मुझे कहीं भी नहीं मिला है कि इसे एक बग के रूप में स्वीकार किया गया है; तथापि, यह एक होने का प्रतीत होता है "

यहाँ स्रोत के लिए लिंक है:।। http://www.devx.com/getHelpOn/10MinuteSolution/20416

:-(

+0

कि के लिए धन्यवाद; लगता है कि यह एक बग सब ठीक है मैं चाहता हूँ MSDN hadn मेरी उम्मीदों को पूरा नहीं हुआ! फिर भी, मुझे लगता है कि मेरे पास एक कामकाज है, हालांकि घटनाओं का उपयोग करना अधिक सुरुचिपूर्ण होता। C'est la vie। –

+1

@ केनकियनन एक बग नहीं है, बल्कि COM घटनाएं कैसे काम करती हैं। आप घटनाओं का एक साथ उपयोग कर सकते हैं एक एडाप्टर पैटर्न का उपयोग करके इंटरफेस, जैसा कि [यहां] (https://stackoverflow.com/a/45825831/1188513) दिखाया गया है। (इस टिप्पणी के साथ मृतकों को जागृत करने के लिए खेद है - यह प्रश्नोत्तर हाल के प्रश्न से जुड़ा हुआ था ... और विषय आकर्षक आईएमओ है) –