2009-08-19 11 views
72

प्रेषक और घटना आर्ग का क्या मतलब है/संदर्भित करें? मैं उनका उपयोग कैसे कर सकता हूं (नीचे दिए गए परिदृश्य के लिए)?.NET घटनाक्रम - ऑब्जेक्ट प्रेषक और EventArgs ई क्या हैं?

परिदृश्य:

मैं एक हटाने समारोह के साथ एक कस्टम नियंत्रण का निर्माण करने की कोशिश कर रहा हूँ, और मैं नियंत्रण है कि एक पृष्ठ है कि एक ही कस्टम नियंत्रण के कई शामिल हैं पर क्लिक किया गया हटाने में सक्षम होना चाहता हूँ।

+0

@rogerdeuce, हमें एएसपीनेट सी # प्रोजेक्ट पर इस समस्या का सामना करना पड़ा, इसलिए इसे सी # के रूप में टैग किया गया है। मैंने आपकी संपादन टिप्पणियों के आधार पर वीबी टैग भी जोड़ा है। – stringo0

उत्तर

77

प्रेषक यह नियंत्रण है कि कार्रवाई के लिए है (ऑनक्लिक कहें, यह बटन है)।

EventArgs तर्क हैं कि इस घटना के कार्यान्वयनकर्ता उपयोगी हो सकते हैं। ऑनक्लिक के साथ इसमें कुछ भी अच्छा नहीं है, लेकिन कुछ घटनाओं में, जैसे कि ग्रिड व्यू 'चयनित इंडेक्स चेंज' में कहें, इसमें नई अनुक्रमणिका, या कुछ अन्य उपयोगी डेटा शामिल होंगे।

क्या क्रिस कह रहा है आप ऐसा कर सकते है:

protected void someButton_Click (object sender, EventArgs ea) 
{ 
    Button someButton = sender as Button; 
    if(someButton != null) 
    { 
     someButton.Text = "I was clicked!"; 
    } 
} 
+4

लिखने की भी आवश्यकता नहीं है! क्या आप ईवेंट पर विस्तार करना चाहते हैं, या उनके बारे में एक लिंक प्रदान करेंगे? उदाहरण के लिए, क्या मैं ईवेंट के माध्यम से स्ट्रिंग मान में पास कर सकता हूं? यदि हां, तो कैसे? – stringo0

+5

ठीक है "आप" इस कार्यक्रम को भेजने वाले वर्ग हैं। तो आम तौर पर आप अपने 'MyControlsEventEventArgs' के साथ 'EventArgs' को उपclass करते हैं और फिर उस पर गुण सेट करते हैं जिसे आप पास करना चाहते हैं। इसलिए जब आप घटना भेजते हुए नियंत्रण लिख रहे हों तो आप केवल चीजें यहां डाल दें। यदि आप * बटन * में एक स्ट्रिंग मान रखना चाहते हैं तो आप आमतौर पर 'कमांडअर्गमेंट' फ़ील्ड का उपयोग करते हैं, जिसे आप प्रेषक को 'बटन' (मेरे पोस्ट में) के रूप में कास्ट करके एक्सेस कर सकते हैं। –

7

मैन्युअल रूप से आपका नियंत्रण के प्रकार के इस डाली, और फिर इसका इस्तेमाल हटा सकते हैं या आदि जैसे, कुछ इस तरह निष्क्रिय करने के लिए:

private void myCustomControl_Click(object sender, EventArgs e) 
{ 
    ((MyCustomControl)sender).DoWhatever(); 
} 

'इस' सिर्फ उद्देश्य यह है कि actioned किया गया है (उदाहरण के लिए क्लिक किया गया)।

घटना तर्क अधिक जटिल नियंत्रणों के लिए उपclassed है, उदाहरण के लिए एक वृक्षदृश्य, ताकि आप घटना के बारे में अधिक जानकारी जान सकें, उदाहरण के लिए उन्होंने वास्तव में कहां क्लिक किया।

+0

क्या आप इस पर थोड़ा सा विस्तार कर सकते हैं? मैं प्रेषक/घटनाओं को कैसे संसाधित करूं? मैं उनका उपयोग करने के लिए उपयोग नहीं किया जाता है। – stringo0

+0

@ stringo0 प्रेषक वह ऑब्जेक्ट है जिसने ईवेंट को उठाया (यह घटना द्वारा प्रतिनिधि को 'इस' को पारित करके कॉल करता है)। EventArgs, अगर subclassed नहीं है, पूरी तरह से ** कोई उपयोग ** है। तो जब तक आपके पास कोई चयनित IndexEventArgs पैरामीटर या CancelEventArgs नहीं है, तो आप कुछ भी नहीं कर सकते हैं। यदि आप का उपयोग करने के लिए उपयोग नहीं किया जाता है तो आपको इसकी आवश्यकता नहीं होती है लेकिन आपको विधि हस्ताक्षर में उनकी आवश्यकता होती है। तो आप बस उन्हें अनदेखा कर सकते हैं। यदि आप घटनाओं को संभालने के लिए लैम्ब्डा लिखते हैं तो आपको इन तर्कों के नाम –

19

sender उद्देश्य यह है कि घटना है कि ईवेंट हैंडलर निकाल लाया को दर्शाता है। यह उपयोगी है यदि आपके पास एक ही ईवेंट हैंडलर का उपयोग करके कई ऑब्जेक्ट्स हैं।

EventArgs एक डमी बेस क्लास का कुछ है। अपने आप में और कम से कम बेकार है, लेकिन यदि आप इससे प्राप्त करते हैं, तो आप अपने ईवेंट हैंडलर को पास करने के लिए जो भी डेटा चाहते हैं उसे जोड़ सकते हैं।

जब आप अपनी खुद की घटनाओं को लागू करते हैं, तो EventHandler या EventHandler<T> का उपयोग अपने प्रकार के रूप में करें। यह गारंटी देता है कि आपके सभी ईवेंट (जो एक अच्छी बात है) के लिए आपके पास इन दो पैरामीटर होंगे।

5
  1. 'इस' जो कुछ कार्रवाई है वस्तु कहा जाता है कुछ नियंत्रण पर प्रदर्शन

  2. 'घटना' अपनी जो है नियंत्रण बारे में कुछ जानकारी होने कुछ behavoiur और पहचान कुछ लोगों द्वारा प्रदर्शन user.when कार्रवाई घटना के लिए उत्पन्न द्वारा उत्पन्न होगा यह सरणी के भीतर रखने जोड़ने घटना agrs

  3. 0 कहा जाता है
संबंधित मुद्दे