2014-12-21 4 views
1

У меня есть в моих ресурсах изображения с именами: {1.jpg, 2.jpg, ............., 30.jpg} и у меня есть Кнопки {btn1, btn2, ............., btn30} все, что я хочу сделать, это поставить пример изображения 1.jpg в панели, щелкнув btn1 ... то же самое касается изображения2 для btn2 ..till изображения 30 для btn30 в одной и той же панели это то, что я писал в моем коде ...Не могу получить индекс нажатой кнопки

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

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Button[] buttons = { btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn10, btn11, btn12, btn13, btn14, btn15, btn16, btn17, btn18, btn19, btn20, btn21, btn22, btn22, btn23, btn24, btn25, btn26, btn27, btn28, btn29, btn30 }; 

     //did this becz couldnt fill the array buttons with a for loop...hope if u know to tell me how 
     for(int i=0;i<30;i++) buttons[i].Click += myEventHandler; 

    } 

    void myEventHandler(object sender, EventArgs e) 
    { 
     Button button = sender as Button; 
     for(int i=0;i<30;i++) 
     { 
      if (sender.Equals ////howw to get the index of the button 
     } 

     Bitmap b=new Bitmap(myProject.Properties.Resources //how to apply the index of the button in getting the name of the image; 
     panel2.BackgroundImage=b; 
    } 
} 
+0

Я не вижу никакого другого пути, как просто, как поиск вашего массива для тех, которые имеют то же имя, что и переданное в ... Я думаю, что я использовал бы лямбда-инструкцию в вашем цикле for и общий метод ChangeImage. – JamJar00

+1

Я думаю, вы могли бы использовать свойство тега кнопки. btn1 = новая кнопка {Tag = "1.jpg"}; –

+0

И затем получите имя изображения в обработчике события с этим свойством –

ответ

2

Держите кнопки в частном списке в классе и использовать IndexOf в обработчик событий ,

private List<Button> buttons; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    buttons = new [] { btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn10, btn11, btn12, btn13, btn14, btn15, btn16, btn17, btn18, btn19, btn20, btn21, btn22, btn22, btn23, btn24, btn25, btn26, btn27, btn28, btn29, btn30 }.ToList(); 
    buttons.ForEach(x => x.Click += myEventHandler); 
} 

void myEventHandler(object sender, EventArgs e) 
{ 
    Button button = sender as Button; 
    int idx = buttons.IndexOf(button); 
} 
0

Как я сказал в комментариях, я бы, лично, реорганизовать немного и использовать лямбда-выражения, которые вызывают общий метод «ChangeImage».

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

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Button[] buttons = { btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn10, btn11, btn12, btn13, btn14, btn15, btn16, btn17, btn18, btn19, btn20, btn21, btn22, btn22, btn23, btn24, btn25, btn26, btn27, btn28, btn29, btn30 }; 

     //did this becz couldnt fill the array buttons with a for loop...hope if u know to tell me how 


     for (int i = 0; i < 30; i++) 
     { 
      int n = i; 

      buttons[i].Click += (object s, EventArgs ea) => ChangeImage(n); 
     } 
    } 

    void ChangeImage(int id) 
      { 
Bitmap b=new Bitmap(myProject.Properties.Resources //how to apply the index of the button in getting the name of the image; 
       panel2.BackgroundImage=b; 


      } 
} 

Вы можете затем использовать метод ChangeImage для chanmge фона к изображению с идентификатором передается в через параметр ид :)

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