Windows формы, как я могу добавить элементы управления в форму после инициализации, не перекрывая смежные элементы управления в той же форме? - PullRequest
0 голосов
/ 20 апреля 2020

Добавление элемента управления со свойством Dock, установленным на DockStyle.Fill, вне функции InitializeComponent() формы не учитывает смежные элементы управления в форме.

В этом случае мой DataGridView элемент управления перекрывается моим MenuStrip элементом управления. Data Grid View Overlapping with Tool strip menu

Я предполагаю, что это как-то связано с 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" остается для меня загадкой.

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