VB.NET

2012-04-25 15 views
5

में स्थानीय चर में इवेंट हैंडलर को कैसे जोड़ें I VB.NET में एक फ़ॉर्म है जिसका उपयोग मुख्य रूप से एक संवाद के रूप में किया जाता है। इसके उदाहरण हमेशा स्थानीय रूप से परिभाषित होते हैं, इसके लिए कोई क्षेत्र नहीं है। जब उपयोगकर्ता संवाद में ओके बटन पर क्लिक करता है, तो यह मेरी कक्षाओं में से एक का एक उदाहरण, एक तर्क के साथ एक घटना को आग लगा देगा।VB.NET

चूंकि यह हमेशा एक स्थानीय चर है, मैं उस घटना के लिए इवेंट हैंडलर कैसे जोड़ सकता हूं? संवाद कॉल करने के लिए मुख्य रूप के लिए

public Event ObjectCreated(ByRef newMyObject as MyObject) 

कोड: मैं MyDialog में घटना, एक क्षेत्र के लिए खुद के लिए खोज की है और कुछ पाया, लेकिन मैं वास्तव में इसे समझ नहीं कर सकते हैं ...

कोड : (वाक्यविन्यास को कभी भी ध्यान न दें)

Dim dialog As New MyDialog() 
dialog.ShowDialog(Me) 
AddHandler ObjectCreated, (what do I put here?) //Or how do I add a handler? 

जैसा कि आप देख सकते हैं कि मैं अपने कार्यक्रम के लिए हैंडलर जोड़ने के तरीके पर अटक गया हूं। क्या कोई मेरी मदद कर सकता है? इसे करने के सबसे अच्छे तरीके से पसंदीदा ...

उत्तर

6

यह अनुशंसा की जाती है कि आप एक ही स्रोत और ईवेंट तर्क मॉडल का उपयोग सभी सिस्टम ईवेंट हैंडलर के रूप में करते हैं।

बनाएं अपने स्वयं के वर्ग, EventArgs से इनहेरिट के रूप में:

Public Class MyObjectEventArgs 
    Inherits EventArgs 

    Public Property EventObject As MyObject 

End Class 

फिर अपने घटना का ऐलान करते हैं और हैंडलर विधि, जैसे:

Public Event ObjectCreated As EventHandler(Of MyObjectEventArgs) 

Private Sub Container_ObjectCreated(ByVal sender As Object, ByVal e As MyObjectEventArgs) 
    ' Handler code here 
End Sub 

फिर हैंडलर आपके घटना के लिए प्रयोग कर देते हैं:

AddHandler ObjectCreated, AddressOf Container_ObjectCreated 

इसके अतिरिक्त, आप Handles का उपयोग ev ईएनटी आपका मुख्य रूप से उठाया (नाम MainForm कल्पना करते हुए), के रूप में नीचे:

public Sub OnObjectCreated(ByRef newMyObject as MyObject) 
    ... 
End Sub 

फिर हैंडलर जोड़ा जाता है:

Private Sub MainForm_ObjectCreated(ByVal sender As Object, ByVal e As MyObjectEventArgs) Handles MainForm.ObjectCreated 
    ' Handler code here 
End Sub 
+0

क्रिस्टल स्पष्ट, धन्यवाद पर सेट किया जा सकता है। – MarioDS

+0

@ मारियो डीसेचापेमेस्टर मैंने सोचा कि आपका प्रश्न "इसे करने का सबसे अच्छा तरीका है ..."। आप मेरे उत्तर को अन-मार्क क्यों करेंगे? –

+0

वैसे मुझे तुरंत एहसास हुआ कि मैंने फिर से स्वीकार किया, भ्रम के लिए खेद है। – MarioDS

1

आप सबरूटीन वास्तव में कार्यान्वित कि जब घटना उत्पन्न होता है लिखने की ज़रूरत :

AddHandler ObjectCreated, AddressOf OnObjectCreated 

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

+0

वाह, यह बहुत आसान है ... मैं वास्तव में याद कर रहा था AdressOf कीवर्ड! – MarioDS

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