2013-11-01 9 views
1

У меня есть массив Button в C# WFA, и я хочу создать событие для щелчка любой кнопки в массиве. Как я могу это сделать? И как узнать, какое местоположение в массиве это? Я знаю, что отправитель - это сама кнопкаНажмите событие для Button Array

ответ

3

Вы можете использовать for цикл, который замыкает на переменную, содержащую текущий индекс:

for(int i = 0; i < buttons.Length; i++) 
{ 
    //it's important to have this; closing over the loop variable would be bad 
    int index = i; 
    buttons[i].Click += (sender, args) => SomeMethod(buttons[index], index); 
} 
+0

Спасибо you.I просто хочу знать, что это последняя строка? Я знаю, что он делает, просто хочу знать, как это называется, поэтому я могу это изучить. – user2390564

+0

Создает анонимный метод; этот конкретный синтаксис называется лямбда-выражением. – Servy

2

Вы можете добавить обработчик событий к каждой кнопке в цикле for.

Внутри обработчика вы можете позвонить по номеру array.IndexOf((Button)sender).

-1

попробовать это

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     Button[] myButtons = new Button[10]; 
     private void Form1_Load(object sender, EventArgs e) 
     { 

      for(int i = 0; i < myButtons.Length; i++) 
      { 
       int index = i; 
       this.myButtons[i] = new Button(); 

       this.myButtons[i].Location = new System.Drawing.Point(((i + 1) * 70), 100 + ((i + 10) * 5)); 
       this.myButtons[i].Name = "button" + (index + 1); 
       this.myButtons[i].Size = new System.Drawing.Size(70, 23); 
       this.myButtons[i].TabIndex = i; 
       this.myButtons[i].Text = "button" + (index + 1); 
       this.myButtons[i].UseVisualStyleBackColor = true; 
       this.myButtons[i].Visible = true; 

       myButtons[i].Click += (sender1, ex) => this.Display(index+1); 

       this.Controls.Add(myButtons[i]); 
      } 
     } 

     public void Display(int i) 
     { 
      MessageBox.Show("Button No " + i); 
     } 

    } 
} 
+0

Это не скомпилировалось. 'Display' не соответствует правильному синтаксису, и вы вызываете метод в цикле' for', не создавая из него делегата. – Servy

+2

компилируется и работает успешно. –

+0

Как добавить изображение к кнопке, этот метод работал для меня, и теперь я пытаюсь добавить изображение – shawn

Смежные вопросы