Динамически создаваемое расстояние расположения панелей - PullRequest
0 голосов
/ 02 апреля 2020

Я новичок в программировании и хочу создать небольшую "игру" с Panel s.
(Позже, может быть, я поменяю на PictureBox, но пока все нормально)

Код:

private void Form1_Load(object sender, EventArgs e)
{
    int size = 20;
    int quantity = 10;

    Random rnd = new Random();

    for (int y = 0; y < quantity; y++)
    {
        for (int x = 0; x < quantity; x++)
        {
            Color randomColor = Color.FromArgb(
              rnd.Next(256), rnd.Next(256), rnd.Next(256)
            );

            Panel panel = new Panel
            {
                Size        = new Size(size, size),
                Location    = new Point(x * size, y * size),
                BorderStyle = BorderStyle.FixedSingle,
                BackColor   = randomColor
            };

            Controls.Add(panel);
            //panel.Click += Panel_Click;
        }
    }
}

У меня два вопроса:

  • Как мне установить 5 расстояние в пикселях друг от друга Panel друг от друга ?
  • Стоит ли поместить эти панели в конструктор ? Я вижу, что люди предпочитают это.

1 Ответ

1 голос
/ 02 апреля 2020

Вы должны включить дополнительные 5 пикселей padding в Location:

 ...
 int padding  =  5;
 ... 
 Location = new Point(x * (size + padding), y * (size + padding))
 ...

Давайте извлечем метод:

 private void CreateGameField() {
   int size     = 20;
   int padding  =  5;
   int quantity = 10;

   Random rnd = new Random();

   for (int y = 0; y < quantity; ++y)
     for (int x = 0; x < quantity; ++x) 
       new Panel() {
         Size        = new Size(size, size),
         Location    = new Point(x * (size + padding), y * (size + padding)),
         BorderStyle = BorderStyle.FixedSingle,
         BackColor   = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)), 
         Parent      = this, // instead of Controls.Add(panel);
       };
 }

Затем

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

FromLoad обработчик событий - хорошее место для создания игрового поля; если вы хотите, вы можете поместить CreateGameField() в конструкторе, но поставить после InitializeComponent():

 public Form1() {
   InitializeComponent();

   CreateGameField(); 
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...