как позиционировать объект с помощью переменных - PullRequest
0 голосов
/ 02 сентября 2011

Я пытаюсь создать 81 графический блок и сделать так, чтобы они автоматически располагались на определенном расстоянии друг от друга, но, похоже, они не располагаются в каком-либо логическом порядке. Я должен инициализировать точку X на -1700, чтобы они даже появлялись на экране. Следующий код получает первые 15, где я хочу их, но затем они начинают накладываться друг на друга вместо продолжения шаблона. Это результат около часа работы, но изначально логика выглядела хорошо. У меня даже было окно сообщения, в котором отображались бы текущие X, Y, которые были установлены, и это было правильно, просто они не помещали бы их в эти координаты.

int X = -1700;
int Y = 0;

for (int i = 0; i < 81; i++)
{
    this.Controls.Add(championThumbNailsArray[i]);
    championThumbNailsArray[i].Height = 80;
    championThumbNailsArray[i].Width = 80;
    championThumbNailsArray[i].Location = new Point(X, Y);
   // MessageBox.Show(Convert.ToString(X) + "," + Convert.ToString(Y));
    championThumbNailsArray[i].ImageLocation = akali.grabPicture();
    //championThumbNailsArray[i].ImageLocation = championsArray[i].grabPicture();
    if (X <= 425)
        X = X + 85;
    else
    {
        X = -1700;
        Y = Y + 85;
    }                           
}

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

Вместо ручного размещения элементов используйте FlowLayoutPanel . Добавьте элементы управления на панель, и пусть она сделает все за вас.

0 голосов
/ 02 сентября 2011

Этот код работает так, как вы ожидаете

private void Form1_Load(object sender, EventArgs e)
        {
            int x = 0;
            int y = 0;

            for (int i = 0; i < 81; i++)
            {
                PictureBox p = new PictureBox();
                p.BorderStyle = BorderStyle.Fixed3D;
                p.Height = 80;
                p.Width = 80;
                p.Location = new Point(x, y);

                x += 85;

                if (x > 425)
                {
                    x = 0;
                    y += 85;
                }

                this.Controls.Add(p);
            }

        }

enter image description here

Но я бы сказал что-то вроде @Ed, элемент управления FlowLayout

...