2009-08-07 13 views
5

मैं प्रोग्रामिंग के लिए अपेक्षाकृत नया हूं, जैसा कि आप जल्द ही देखेंगे ...
मेरे पास 2 ईवेंट हैं, जो एक ही कोड निष्पादित करते हैं। मैं वर्तमान में एक DataGridView के लिए निम्नलिखित छद्म कोड है:सी # एक विधि में 2 घटनाओं को गठबंधन करें

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

वहाँ एक घटना में इस गठबंधन करने के लिए कोई तरीका है? क्या ऐसा करने के लिए इससे अच्छा तरीका है?

उत्तर

7

क्यों न केवल एक विधि है और इसे दो घटनाओं में मानचित्रित करें?

private void dgv_CellEvent(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "123"; 
} 

// In the event mapping 

dgv.CellEnter += dgv_CellEvent; 
dgv.CellClick += dgv_CellEvent; 
+0

ऐसा करने के लिए सबसे संक्षिप्त, "सही" तरीका लगता है। धन्यवाद! – muhan

1

सबसे आसान तरीका यह है है:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    dgv_CellClick(sender, e); 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

वहाँ कोड स्वचालित रूप से आईडीई द्वारा उत्पन्न है कि तारों अपने ईवेंट हालांकि, और आप इस संशोधित कर सकता है जिससे वे दोनों एक ही ईवेंट हैंडलर ऊपर हुक, लेकिन मैं जेनरेट कोड के साथ गड़बड़ करना पसंद नहीं है।

एएसपी.नेट या डब्ल्यूपीएफ में, आपके डेटा ग्रिड या इसी तरह की एक संपत्ति है जो इवेंट हैंडलर का नाम निर्धारित करती है, ताकि आप उन्हें दोनों को इंगित कर सकें।

यदि आप सी # के बजाय वीबी.नेट में प्रोग्रामिंग कर रहे थे, तो आप केवल एक विधि लिख सकते हैं और हैंडल कीवर्ड का उपयोग यह कहने के लिए कर सकते हैं कि यह एक विधि दोनों घटनाओं को संभालती है।

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    dgv_CellEnter(sender, e); 
} 

इस तरह जब आप या तो क्लिक करें या इसे एक ही विधि चलेंगे दर्ज धक्का:

+2

... या आप ईवेंट हैंडलर की सामग्री को किसी अन्य विधि में दोबारा कर सकते हैं, और दोनों ईवेंट हैंडलर उस विधि को कॉल करते हैं। –

+0

मुझे 3 सेकंड तक जवाब में मारो :) – mlevit

+0

@mlevit - मैंने वास्तव में इसे सबमिट करने के बाद एक बार लिया और मौका दिया और इसे संपादित किया! –

1

आप निम्न की कोशिश कर सकते।

धन्यवाद

+2

विकल्प 2 के संबंध में एक अलग नियंत्रण – Gregory

6

ठीक है त्वरित उत्तर हाँ है। विधियों की गलतियों को अपनी विधि में रखें और फिर उस विधि पर ऑनक्लिक ईवेंट कॉल करें। यह कोड को अपडेट करने के लिए आपको केवल एक ही स्थान देगा, इसे बदलने की आवश्यकता है।

ऐसा करने के 100 अलग-अलग तरीके हैं, और यह सबसे आसान है।

तो कुछ इस तरह बना सकते हैं:

protected void MyNewMethod() 
{ 
    string abc = "123"; 
} 

और फिर अपने अन्य तरीकों सिर्फ इस तरह यह फोन करेगा:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    MyNewMethod(); 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    MyNewMethod(); 
} 

विकल्प 2

बस मार्कअप से एक ही विधि कॉल । आपको वास्तव में केवल उन तरीकों में से एक की आवश्यकता है और मार्कअप में ईवेंट एक ही कॉल कर सकता है।

+1

के ईवेंट हैंडलर को कॉल करने के बजाय मध्यस्थ विधि होने के लिए सबसे अच्छा तरीका है, यह प्रश्न विंडोज प्रपत्र से संबंधित प्रतीत होता है, जिसमें मार्कअप नहीं है। –

+0

आह ... माफ करना मुझे याद आया। यह अभी भी नियंत्रण का चयन करता है और गुण विंडो लाता है और फिर "टैब" ईवेंट का चयन करता है। और आप ड्रॉप डाउन से एक ही घटना का चयन कर सकते हैं। – YetAnotherDeveloper

+1

मैं इसे "ऐसा करने का सही तरीका" मानता हूं। इस तरह से ऐसा करने का एक लाभ यह है कि यदि घटनाओं के अलग-अलग हस्ताक्षर होते हैं, तो भी आप MyNewMethod() को कॉल कर सकते हैं। – stone

2

संपत्ति विंडो में (सी # एक्सप्रेस का उपयोग करके) आप ड्रॉप-डाउन में ईवेंट हैंडलर का चयन कर सकते हैं या मैन्युअल रूप से विधि का नाम टाइप कर सकते हैं। हस्ताक्षर सिर्फ मैच करना है। मुझे लगता है कि यह वीएस में समान है।

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