Добавление элемента управления со свойством Dock
, установленным на DockStyle.Fill
, вне функции InitializeComponent()
формы не учитывает смежные элементы управления в форме.
В этом случае мой DataGridView
элемент управления перекрывается моим MenuStrip
элементом управления.
Я предполагаю, что это как-то связано с SuspendLayout()
, ResumeLayout(false)
и PerformLayout()
, и я попытался имитировать вызовы функций, сделанные в InitializeComponent()
, как так:
mainForm = new Form1();
//add post-init control
mainForm.menuStrip1.SuspendLayout();
mainForm.SuspendLayout();
mainForm.TableMainGridView = mainForm.GetGridView();
((System.ComponentModel.ISupportInitialize)(mainForm.TableMainGridView)).BeginInit();
mainForm.Controls.Add(mainForm.TableMainGridView);
((System.ComponentModel.ISupportInitialize)(mainForm.TableMainGridView)).EndInit();
mainForm.menuStrip1.ResumeLayout(false);
mainForm.menuStrip1.PerformLayout();
mainForm.ResumeLayout(false);
mainForm.PerformLayout();
Но это ничего не меняет.
После еще нескольких копаний кажется, что SuspendLayout()
и ResumeLayout()
используются только для выполнение форм с множеством элементов управления.
PerformLayout()
должен «заставить элемент управления применить логику макета c ко всем дочерним элементам управления». но что это за "logi c" остается для меня загадкой.