2017-01-12 5 views
-1

Итак, что я пытаюсь сделать, это сделать массив кнопок, но отображаются только кнопки из ранее определенного массива. я не очень хорошо объясняю, так что плохо сделайте визуальное представление о том, что я имею в виду. enter image description hereСоздание массива путем «сканирования» другого массива C#

Я понимаю, что это выглядит просто, и что я собрал его в течение 5 минут, но я надеюсь, что он справится с тем, что я пытаюсь сделать. я просто не знаю, как это сделать. Квадраты должны представлять кнопки. Im пытается сделать его в a, в Visual Studio.

Это то, что ив получил до сих пор:

private void Form1_Load(object sender, EventArgs e) 
    { 
     Marble(); 

    } 
    public void Marble() 
    { 
     int ButtonWidth = 40; 
     int ButtonHeight = 40; 
     int Distance = 20; 
     int start_x = 10; 
     int start_y = 10; 
     int y = 0; 
     int x = 0; 
     int delX = x + (y * 2); 

     for (x = 0; x < 8; x++) 
     { 

      for (y = 0; y < 8; y++) 
      { 


       GameButton tmpButton = new GameButton(); 
       tmpButton.BackColor = Color.Black; 
       tmpButton.Top = start_x + (x * ButtonHeight + Distance); 
       tmpButton.Left = start_y + (y * ButtonWidth + Distance); 
       tmpButton.Width = ButtonWidth; 
       tmpButton.Height = ButtonHeight; 
       tmpButton.Text = "X: " + x.ToString() + " Y: " + y.ToString(); 
       tmpButton.MouseUp += TmpButton_MouseUp; 
       tmpButton.Row = x; 
       tmpButton.Column = y; 
       tmpButton.Currentcolor = false; 

       if (x == 4 && y == 6) { 
        tmpButton.BackColor = Color.White; 


       } 


       else 
       { 


        this.Controls.Add(tmpButton); 
       } 

      } 

     } 

    } 


    private void TmpButton_MouseUp(object sender, MouseEventArgs e) 
    { 
     GameButton Mygamebutton = (GameButton) sender; 
     Mygamebutton.Currentcolor = !Mygamebutton.Currentcolor; 
     if (Mygamebutton.Currentcolor == true) 
     { 
      Mygamebutton.BackColor = Color.Black; 
     } 
     else 
     { 
      Mygamebutton.BackColor = Color.White; 
     } 
    } 
} 
+0

Эти кнопки должны появиться на веб-страницу, приложение формы Windows, приложение WPF или что еще? –

+0

Чистые запросы написания кода не относятся к теме при переполнении стека - мы ожидаем, что вопросы здесь будут касаться * специфических проблем программирования, но мы с радостью поможем вам написать это самостоятельно! Скажите нам [что вы пробовали] (http://stackoverflow.com/help/how-to-ask) и где вы застряли. Это также поможет нам лучше ответить на ваш вопрос. –

+0

- размер массива всегда один и тот же? – NicoRiff

ответ

0

Я бы атаковать этот requierement с помощью TableLayoutPanel управления одного и того же размера вашего массива. Вам нужно будет использовать структуру for (или вложенную) для цикла для всех позиций вашего массива, и если внутри этой позиции у вас есть необходимое значение, тогда вы создаете кнопку внутри той же позиции TableLayoutPanel.

В случае, если вы не знаете о TableLayoutPanel управления: https://msdn.microsoft.com/en-us/library/dd492143.aspx

+0

Для этого задания нам разрешено использовать панель инструментов ... вот почему im пытается найти другой способ создания массива. –

+0

Чтобы добавить TableLayoutPanel, вам не нужен набор инструментов. вы можете добавить его программно – NicoRiff

0

Сначала создать все кнопки:

const int BUTTON_SIZE = 40; 
int W = ParentPanel.Width/BUTTON_SIZE; 
int H = ParentPanel.Height/BUTTON_SIZE; 

for (int x = 0; x < W; x++) 
{ 
    for(int y = 0; y < H; y++) 
    { 
     Button btn = new Button(); 
     btn.Name = "button_" + x.ToString() + "_" + y.ToString(); 
     btn.Size = new Size(BUTTON_SIZE, BUTTON_SIZE); 
     btn.Location = new Point(BUTTON_SIZE * x, BUTTON_SIZE * y); 
     ParentPanel.Controls.Add(btn); 
    } 
} 

Как вы уже заметили, кнопки названы как button_0_1, button_0_2 и т.д. Теперь все, что вам нужно сделать, это сделать простой звонок:

for(int x = 0; x < W; x++) 
{ 
    for(int y = 0; y < H; y++) 
    { 
     Button btn = ParentPanel.Controls.OfType<Button>().FirstOrDefault(ctrl => ctrl.Name == "button_" + x.ToString() + "_" + y.ToString()); 
     if(btn != null) 
     { 
      // depending on if arr[x][y] == 1 make your action 
     } 
    } 
} 
Смежные вопросы