У меня есть несколько TableLayoutPanels
на формах MDI. Каждый макет таблицы имеет несколько элементов управления (включая ObjectListView), и только самый верхний из них установлен на видимый.Черный фон и артефакты на ObjectListView, когда форма получает фокус
Я реализовал решение, данное в этом SO answer, и отлично работает при открытии формы в первый раз, потому что нет мерцания над элементами управления макета при изменении размера.
Я также добавил:
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
foreach (CoTableLayoutPanel tlp in this.Controls)
{
if (tlp != null)
{
tlp.BeginUpdate();
tlp.Size = firstLayout.Size;
tlp.EndUpdate();
}
}
}
я выше, так что при переключении раскладки в виде они уже все правильный размер, и я избегаю дальше мерцает в то время как изменение размера. Это также отлично работает.
Однако, когда у меня есть элемент управления ObjectListView
на этой производной табличной схеме, и я переключаюсь между формами, элемент управления частично нарисован (особенно граница), черный экран отображается быстро, а также каждый последний размер изменяется каждый раз (column FillsFreeSpace
).
Если я использую стандарт TableLayoutPanel
, управление списком ведет себя так, как ожидалось, т.е. нет артефактов, не отображается черный фон, без изменения размера столбца. Тем не менее, я получаю мерцание назад, когда я открываю форму.
ObjectListView
обладает такими свойствами, как Invalidate
и Refresh
, и я попытался назвать их по OnGotFocus
методы формы. Проблема все еще сохраняется.
Это проблема ObjectListView
или я могу исправить проблему изнутри производной таблицы?
EDIT
Проблема вызвана этим методом:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_COMPOSITED;
return cp;
}
}
Комментируя этот метод сделает ObjectListView
работу, как ожидалось, но возвращается мерцающие.
Любое обходное решение для вышеуказанного метода?
Спасибо за объяснение. –