Проблемы панели макета потока - PullRequest
1 голос
/ 16 сентября 2011

Я пытаюсь составить список элементов управления. Для этого я использовал панель макета потока и пользовательский элемент. После прочтения XML-файла я заполняю панель макета потока своими элементами. Для небольшого количества элементов все выглядит нормально, но для числа, такого как 371 элемент на панели макета потока, что-то не так. В нижней части панели макета потока 95 элементов отсутствуют, и швы должны перекрываться. Пространство, расположенное для этих предметов, я думаю, еще создано. Я прикрепляю экран с произведенным эффектом. Элементы управления создаются в массиве, а затем я повторяю этот массив, чтобы добавить элементы управления на панель макета потока.

http://img510.imageshack.us/img510/3201/screen2011916213527199.jpg

Спасибо.

LE:

public delegate void AddHistoryItemDelegate(Control itm);
        public void AddHistoryItem(Control itm)
        {
            if (InvokeRequired)
            {
                Invoke(new AddHistoryItemDelegate(AddHistoryItem), new object[] { itm });
            }
            else
            {
                flowLayoutPanel1.Controls.Add(itm);
            }
        }
foreach (Control c in histroryItems)
            {
                controls++;
                backgroundWorkerLoadHistory.ReportProgress(controls);
                //flowLayoutPanel1.Controls.Add(c);
                AddHistoryItem(c);
            }

Делегат присутствует, потому что все это происходит в отдельном потоке. histroryItems представляет собой список элементов управления.

LE: Если это имеет значение, я заметил, что, если я удаляю элемент из списка, после загрузки списка, это организовано. Попытка немного взломать, чтобы увидеть, если добавление и удаление элемента управления в конце потока, не имеет никакого эффекта.

Ответы [ 2 ]

3 голосов
/ 17 сентября 2011

Вы можете попробовать это:

        this.flowLayoutPanel1.SuspendLayout();

перед добавлением элементов управления и:

        this.flowLayoutPanel1.ResumeLayout();

после добавления элементов управления. Может быть, следующее должно быть выполнено последовательно:

        this.flowLayoutPanel1.PerformLayout();

и / или:

        this.flowLayoutPanel1.Refresh();
1 голос
/ 28 июня 2012

Я обнаружил, что должен был сделать это:

private void flpChoices_Scroll(object sender, ScrollEventArgs e)
{
   Control c=flpChoices.GetChildAtPoint(new Point(10, 10), GetChildAtPointSkip.None);
   if (c == null) flpChoices.PerformLayout();
}

Где flpChoices - мой FlowLayout Panel.Теперь я не думаю, что событие прокрутки вызвано движением колеса мыши, поэтому я не знаю, что с этим делать.колесо:

void flpChoices_MouseWheel(object sender, MouseEventArgs e)
{
  Control c=flpChoices.GetChildAtPoint(new Point(10, 10), GetChildAtPointSkip.None);
  if (c == null) flpChoices.PerformLayout();

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