2009-09-16 6 views
11

मुझे विंडोज़ फॉर्म पर गतिशील रूप से 5 बटन बनाने की आवश्यकता है और प्रत्येक बटन को क्लिक ईवेंट पर प्रतिक्रिया देना चाहिए। मैंने कोशिश की लेकिन सभी बटन एक ही घटना का जवाब दे रहे हैं।मैं 5 बटन कैसे बना सकता हूं और गतिशील रूप से व्यक्तिगत क्लिक ईवेंट कैसे असाइन करूं?

+4

हमें दिखाएं कि आपने क्या अब तक की कोशिश की है। – dtb

+2

बटन घटनाओं का जवाब नहीं देते हैं। –

उत्तर

33

यह वह जगह है क्या निक के बारे में बात कर रही है अपने दो विकल्प हैं (आप इस कोड चलाने के लिए और दोनों विकल्पों को देखने के लिए सक्षम होना चाहिए):

public Form1() 
    { 
    InitializeComponent(); 

    for (int i = 0; i < 5; i++) 
    { 
     Button button = new Button(); 
     button.Location = new Point(20, 30 * i + 10); 
     switch (i) 
     { 
      case 0: 
       button.Click += new EventHandler(ButtonClick); 
       break; 
      case 1: 
       button.Click += new EventHandler(ButtonClick2); 
       break; 
      //... 
     } 
     this.Controls.Add(button); 
    } 

    for (int i = 0; i < 5; i++) 
    { 
     Button button = new Button(); 
     button.Location = new Point(160, 30 * i + 10); 
     button.Click += new EventHandler(ButtonClickOneEvent); 
     button.Tag = i; 
     this.Controls.Add(button); 
    } 
    } 

    void ButtonClick(object sender, EventArgs e) 
    { 
    // First Button Clicked 
    } 
    void ButtonClick2(object sender, EventArgs e) 
    { 
    // Second Button Clicked 
    } 

    void ButtonClickOneEvent(object sender, EventArgs e) 
    { 
    Button button = sender as Button; 
    if (button != null) 
    { 
     // now you know the button that was clicked 
     switch ((int)button.Tag) 
     { 
      case 0: 
       // First Button Clicked 
       break; 
      case 1: 
       // Second Button Clicked 
       break; 
      // ... 
     } 
    } 
    } 
+1

ठीक है, मैं बस आप से थोड़ा सा आलसी हूँ! – Nick

+0

ये बटन ईवेंट पर क्लिक करने का जवाब देंगे, जैसे कि जब मैं बटन 1 पर क्लिक करता हूं, तो संदेश बटन पर क्लिक करने पर "बटन 1 क्लिक किया गया" प्रदर्शित होना चाहिए, इसे "बटन 2 क्लिक किया जाना चाहिए"। और इतने पर ... –

+1

वे निश्चित रूप से आगे बढ़ेंगे, ब्रेकपॉइंट्स डालकर या संदेशबॉक्स जोड़कर इसका परीक्षण करेंगे। दिखाएं ("यहां मेरी टिप्पणियां जोड़ें"); यह काम देखने के लिए। – SwDevMan81

3

अनुमान लगाएं कि आपने क्या प्रयास किया होगा: हां, सभी बटन एक ही विधि में अपनी घटनाओं को आग लगाते हैं, लेकिन sender-आपके कॉलबैक विधि के पैरामीटर में बटन का संदर्भ होता है जो वास्तव में विशिष्ट घटना का कारण बनता है।

8

मुझे लगता है कि आप एक लूप में हैं और ऐसा कुछ करते हैं?

Button newButton = new Button(); 
newButton.Click += new EventHandler(newButton_Clicked); 

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

वहां से आप उचित कार्रवाई कर सकते हैं।

-1
button b =new button(); 
b.text = " enter text"; 
b.click =+(then press Tab using key board) 
+0

और यह समस्या को कैसे हल करता है? – Moumit