2016-01-30 3 views
0

Я создал 2d массив кнопок для рисования на выполнение программы. Я бы хотел, чтобы каждая кнопка нажата, чтобы соответствовать другому массиву, который я бы создал.Кнопки в Visual Studio

Например, кнопка, созданная в [3,3], также относится к другому массиву в позиции [3,3].

Ниже приведен код, который я использовал для создания массива кнопок.

Button[,] btn = new Button[12, 12]; 

    public Main() 
    { 
     InitializeComponent(); 

     for (int x = 0; x < 12; x++) 
     { 
      for (int y = 0; y < 12; y++) 
      { 
       btn[x, y] = new Button(); 
       btn[x, y].SetBounds(25 * x, 25 * y + 30, 25, 25); 
       btn[x, y].Click += new EventHandler(this.btnEvent_Click); 
       Controls.Add(btn[x, y]); 
      } 
     } 

    } 

    void btnEvent_Click(object sender, EventArgs e) 
    { 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
    } 
+0

это нужно сделать, используя 2-мерный массив? Я предлагаю создать структуру похожих кнопок, которая содержит 2 свойства кнопки. Затем вы можете создать один массив из них. Похоже, было бы намного проще управлять – Muckeypuck

+0

Это был единственный способ, которым я знал, чтобы сгенерировать кнопки при запуске программы. Я мог бы попробовать что-то из-за того, что вы упомянули. –

+0

- оба массива типа кнопки? если так, я могу восстановить свой ответ, потому что он сработает. иначе я не понял этот вопрос. спасибо – Muckeypuck

ответ

0

Два способа сделать это:

Сделать новую кнопку: Создать класс

class CustomButton : Button 
{ 
    /* call all the base constructors and stuff */ 
    //Additional Properties 
    int X { get; set; } 
    int Y { get; set; } 
} 

, который является производным от кнопки и имеет дополнительные свойства для координат в них. Вы можете установить их после создания, а затем обратиться к ним в событии btnEvent_Click.

CustomButton[,] btn = new CustomButton[12, 12]; 

public Main() 
{ 
    InitializeComponent(); 

    for (int x = 0; x < 12; x++) 
    { 
     for (int y = 0; y < 12; y++) 
     { 
      btn[x, y] = new CustomButton(); 
      btn[x, y].X = x; 
      btn[x, y].Y = y; 
      btn[x, y].SetBounds(25 * x, 25 * y + 30, 25, 25); 
      btn[x, y].Click += new EventHandler(this.btnEvent_Click); 
      Controls.Add(btn[x, y]); 
     } 
    } 

} 

void btnEvent_Click(object sender, EventArgs e) 
{ 
    var button = sender as CustomButton; 
    Debug.WriteLine("X: {0} Y: {1}", button.X, button.Y); 
} 

Или: Найти ссылку на эту кнопку в массиве снова.

void btnEvent_Click(object sender, EventArgs e) 
{ 
    var button = sender as Button; 
    //Searching... 
    int x,y; 
    for(x = 0; x < btn.GetLength(0); x++) 
    { 
     bool found = false; 
     for(y = 0; y < btn.GetLength(1); y++) 
     { 
      if(btn[x,y] == button) { 
       found = true; 
       break; 
      } 
     } 
     if(found) break; 
    } 
    //Now x,y have the correct coordinates. 
} 
+0

Спасибо, я внедрил второе предложенное вами решение. Он работает по назначению. –

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