Как исправить автопрокрутку от перемещения точки отправления в программе на основе форм? - PullRequest
0 голосов
/ 27 апреля 2011

Я установил программу, которая добавляет новые строки, когда флажок в конце установлен.Моя проблема с автопрокруткой.Когда строки проходят через край окна, он создает следующую строку, но, похоже, устанавливает начало исходной точки предыдущей строки.

Вот часть кода:

private void AddRow(object sender, EventArgs e)
    {
        bool check = ((CheckBox)sender).Checked;
        if (check)
        {
            proj[i] = new Label();
            proj[i].Text = "Proj #";
            proj[i].Width = 50;
            proj[i].Location = new Point(10, (i * 22) + 50);
        ...
            split[i] = new CheckBox();
            split[i].Text = "";
            split[i].Location = new Point(430, (i * 22) + 50);
            split[i].CheckedChanged += new EventHandler(AddRow);
        }
        this.Controls.Add(proj[i]);
   }

А вот пара скриншотов: enter image description here

enter image description here

Как я могу решить эту проблему?

1 Ответ

1 голос
/ 27 апреля 2011

Проблема в том, как работает автопрокрутка.При прокрутке вниз режим автопрокрутки фактически проходит по всем элементам управления и перемещает их вверх, настраивая их свойства Top.Это, безусловно, затрудняет добавление еще одного ряда.Два простых варианта:

Опция 1 : добавьте каждый ряд элементов управления на свою панель (или, лучше, создайте UserControl, содержащий их).Затем добавьте каждую из этих панелей к FlowLayoutPanel или GridLayoutPanel, который будет выполнять вычисление координат для вас.

-OR-

Опция 2 :Вместо использования (i * 22) + 50, используйте:

if (i == 0)
    proj[i].Location = new Point(10, 50);
else
    proj[i].Location = new Point(10, proj[i-1].Top + 22);

Аналогично для всех других ваших элементов управления.

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

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