Добавление элементов управления на прокручиваемую панель во время прокрутки разрушает сетку - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь заполнить scrollable panel блоками pi c через l oop и вычислить координаты, чтобы нарисовать красивую сетку, но когда я начинаю прокручивать во время рисования (я рисую, например, 50 элементов с задержкой 500 мс между каждым) , то это становится беспорядком, но я не уверен, как работать с «координатами внутри панели»

Когда я не прокручиваю, тогда все в порядке:

enter image description here

Но когда я начинаю прокручивать, он ведет себя так:

enter image description here

Вот мой код для рисования каждого element:

public int X { get; set; } = 0;
public int Y { get; set; } = 200;

private void DrawImage(Image image)
{
    var height = 100;             // height of row
    var width = panel1.Width / 5; // 5 elements per row

    var picbox = new PictureBox();
    picbox.Location = new Point(X, Y);
    picbox.Name = $"image{_images.Count}";
    picbox.Image = image.Bitmap;
    picbox.Height = height;
    picbox.Width = width;

    panel1.Controls.Add(picbox);

    X += width;

    if (X >= panel1.Width)
    {
        Y += height;
        X = 0;
    }
}

Когда я выполнял:

this.panel1.Controls.Cast (). Where (x => x.Name.Contains ("image ")). Select (x => x.Location) .ToList ()

тогда я заметил, что после прокрутки координаты" изображений выше "изменились на отрицательные:

enter image description here

Итак, как я могу работать с координатами внутри панели, а не с экраном?

1 Ответ

1 голос
/ 19 июня 2020

Просто добавьте PictureBoxes в сетку, ОДИН РАЗ, вычисляя их НАЧАЛЬНОЕ положение, игнорируя аспект прокрутки. Установите для свойства AutoScroll панели значение true, и вы получите полосы прокрутки, позволяющие вам, ну, прокручивать. Не нужно пересчитывать позиции или что-то в этом роде ...

@ Idle_Mind, это был отличный намек, спасибо! - Акселли

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