2010-03-05 18 views
20

पर क्लिक किए बिना बटन ईवेंट हैंडलर विधि को कॉल करना मेरे पास बीएसएनटेस्ट नामक मेरी एएसपीएक्स फ़ाइल में एक बटन है। .cs फ़ाइल में एक फ़ंक्शन होता है जिसे बटन क्लिक करने पर बुलाया जाता है।सी #: वास्तव में बटन

btnTest_Click(object sender, EventArgs e) 

मैं इस फ़ंक्शन को अपने कोड के भीतर से कैसे कॉल कर सकता हूं (यानी वास्तव में बटन पर क्लिक किए बिना)?

उत्तर

28
btnTest_Click(null, null); 

बशर्ते कि विधि इन मानकों में से किसी का उपयोग नहीं किया जाता है (यह बहुत आम है नहीं करने के लिए।)

ईमानदारी से कहूं तो, हालांकि यह भावुक है। आप कोड है कि आप निम्न का पालन करना चाहिए कॉल किया जाना चाहिए है:

protected void btnTest_Click(object sender, EventArgs e) 
{ 
    SomeSub(); 
} 

protected void SomeOtherFunctionThatNeedsToCallTheCode() 
{ 
    SomeSub(); 
} 

protected void SomeSub() 
{ 
    // ... 
} 
+0

-1, बहुत ज्यादा कोड। – AMissico

+14

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

+0

आप अपवाद हैंडलिंग कहां रखते हैं? सभी तीन तरीकों से? एक विधि को कॉल करने के लिए विधियां क्यों बनाएं? उलझन में नहीं Buttton_Click (शून्य, शून्य) स्पष्ट है। कुछ अन्य कार्यक्षमताThatNeedsToCallTheCode मुझे कोई समझ नहीं आता है। – AMissico

0

btnTest_Click (नई वस्तु(), EventArgs.Empty)

+1

एक जेनेरिक ऑब्जेक्ट पास करने से एक बुरा विचार लगता है। बटन या शून्य पास करने के लिए बेहतर है। –

+0

@ जॉन आप ऐसा क्यों महसूस करते हैं? –

+0

क्योंकि प्रेषक सामान्य रूप से नियंत्रण होता है, इसलिए यदि क्लिक हैंडलर इसका उपयोग करता है, तो यह उम्मीद करेगा कि 'प्रेषक के रूप में प्रेषक' काम करेगा। –

0

तुम बस किसी अन्य समारोह की तरह btnTest_Click कॉल कर सकते हैं।

सबसे बुनियादी रूप यह होगा:

btnTest_Click(this, null); 
4

विधि या तो sender या e आप सकता है कॉल का उपयोग नहीं कर रहा है:

btnTest_Click(null, null); 

क्या आप शायद करने पर विचार करना चाहिए कोड को उस विधि के भीतर से अपनी विधि में निकालने के लिए, जिसे आप दोनों बटन से ईवेंट इवेंट हैंडलर पर क्लिक कर सकते हैं, और कार्यक्षमता की आवश्यकता वाले कोड में किसी अन्य स्थान पर कॉल कर सकते हैं।

2

यह आपके फॉर्म पर सिर्फ एक विधि है, आप इसे किसी भी अन्य विधि की तरह कॉल कर सकते हैं। तुम बस एक EventArgs बनाने के लिए उद्देश्य केवल

btnTest_Click (शून्य, नल) फोन से इसके पास, (और यह sender के रूप में बटन के हत्थे पारित)

18

लिए उपयोग

btnTest_Click(this, new EventArgs()); 
+4

'EventArgs.Empty'? – Tanzelax

+3

EventArgs.Empty नए EventArgs() की स्थिर है। तो EventArgs.Empty अधिक उपयुक्त है, लेकिन नया बनाना लगभग उतना ही अच्छा है। – AMissico

2

है;

बस सुनिश्चित करें कि आप फ़ंक्शन में उन पैराम में से किसी एक का उपयोग करने की कोशिश नहीं कर रहे हैं।

1
पहला बटन घटना कॉल दूसरा बटन (ImageButton) घटना के अंदर

:

imagebutton_Click((ImageButton)this.divXXX.FindControl("imagbutton"), EventArgs.Empty); 

क्या आप इसे में कुछ को बचाने अगर इस तरह के ImageButton के commandArgument के रूप में बटन राज्य का उपयोग कर सकते हैं।

6

सभी उपरोक्त विधियां अच्छी नहीं हैं क्योंकि आप ईवेंट फ़ंक्शन नाम बदल सकते हैं। सबसे आसान है:

btnTest.PerfromClick();

5

आप OnClick विधि को आमंत्रित करने के लिए प्रतिबिंब का उपयोग कर सकते हैं जो क्लिक ईवेंट हैंडलर को आग लगाएगा।

मुझे गंदा पोस्टिंग लगता है लेकिन यह काम करता है ...

MethodInfo clickMethodInfo = typeof(Button).GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance); 

clickMethodInfo.Invoke(buttonToInvoke, new object[] { EventArgs.Empty }); 
-1
btnTest.Click +=new EventHandler(btnTest_Click) 
संबंधित मुद्दे