Мой подход похож на принятый ответ от TcKs.Проблема, с которой я столкнулся, заключалась в том, что у меня был обработчик событий для группы элементов управления, которые отвечали на VisibleChanged с помощью обработчика событий, перемещающего элементы управления внутри Panel.Проблема была (конечно) в том, что видимость меняется при первой загрузке формы, но после события .Load ().
Я создал и установил значение bool для формы:
private bool formShown = false;
, а затем добавил следующую строку в Form_Load ()
this.Paint += (s, args) => { formShown = true; };
с первой строкой моего обработчика событий VisibleChanged () как:
if(!formShown) { return; }
Сжато и функционально.