Я создал Form
с загрузкой Panel
на нем. Идея состоит в том, что я хочу показать эту панель загрузки, пока мой динамически созданный элемент управления не будет готов к отображению.Запретить управление winforms стать видимым при динамическом добавлении коллекции Controls
Сначала отображается изображение Panel
, а затем во время события OnShown
я создаю свой элемент управления и добавлю его на страницу. Причина, по которой я использую OnShown
, заключается в том, что Form
используется в сценарии Mdi, поэтому мне нужно, чтобы он был полностью отображен, прежде чем я начну загрузку элемента управления (если я попробую это в событии Load, то вкладка Mdi не будет отображаться, пока мой контроль загружен).
Проблема заключается в том, что существует заметное мерцание, которое я считаю, это связано с тем, что, когда я добавить свой контроль в Controls
коллекции:
а) Видимое свойство немедленно установить в действительности. b) мой элемент управления, кажется, появляется перед панелью загрузки, даже если индекс z выглядит правильно.
Вот суть вопроса
protected override void OnShown(EventArgs e)
{
Debug.WriteLine(loadingPanel.Visible); //true
Debug.WriteLine(Controls.GetChildIndex(loadingPanel)); //0
Debug.WriteLine(myControl.Visible); //false
myControl.Visible = false;
Controls.Add(myControl);
//**
Debug.WriteLine(myControl.Visible); //true
Debug.WriteLine(Controls.GetChildIndex(loadingPanel)); //0
Debug.WriteLine(Controls.GetChildIndex(myControl)); //1
Debug.WriteLine(loadingPanel.Visible); //true
base.OnShown(e);
}
Я надеялся, что я мог бы добавить свой контроль в коллекцию и она будет оставаться Visible = false
так, чтобы я мог установить Visible = true
когда событие Load моего элемент управления было завершено. Вместо этого мой контроль появляется, и я становлюсь мерцающим. Интересно, что если я не установил loadingPanel.Visible = false
в любой момент, то, как только мой контроль завершит загрузку, загрузочная панель снова появится и скрывает мой контроль.
Любые идеи?
Вы можете переопределить метод рисования и установить флаг в свой метод «OnShown», пропуская любые операции с краской до завершения добавления. Просто удар в темноте! – Charleh
@Charleh вы могли бы разработать еще кое-что, похоже, что это может быть что-то стоящее попробовать?Может быть, в ответ? – OffHeGoes