Стыковка инкапсулированного элемента управления
У меня есть инкапсулированный контроль в производном TabPage
и у меня возникли проблемы пристыковать его к форме MainForm
который содержит производные TabPage
,
Я добавил TabPage
и контроль правильно, и они обнаруживаются на MainForm
, Тем не менее, элемент управления не правильно закреплен (style: fill). Вы можете проверить это, изменив размер формы.
Я установил свойство _control.Dock = System.Windows.Forms.DockStyle.Fill
а также _control.Anchor = Left | Right | Top | Bottom
в производном TabPage
конструктор.
Ниже приведен пример кода:
public class DerivedTab : TabPage {
public DerivedTab(){
...
_control= new BrightIdeasSoftware.TreeListView();
this.Controls.Add(this._control);
_control.Anchor = System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right | System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom;
_control.Dock = System.Windows.Forms.DockStyle.Fill;
...
}
}
в MainForm
, это функция, которая создает производную вкладку во время выполнения:
private DerivedTab CreateTab(string name)
{
DerivedTab tab = new DerivedTab(this, name);
tab.SuspendLayout();
MainTab.Controls.Add(tab);
return tab;
}
В любом случае, я сгенерировал этот код с помощью Visual Studio Designer, и элемент управления корректно закрепляется. Затем я создал класс для вкладки (поскольку мне потребуется много и различное количество этих вкладок) и скопировал все, что относится к вкладке, в CreateTab
функция. Я переместил все, что связано со свойством вкладки, в ее конструктор. Я инкапсулировал контроль в производном TabPage
и переместил все, что связано с элементом управления, в производную вкладку.
Итак, чего мне не хватает? Можно ли закрепить инкапсулированный элемент управления без реализации функции обработчика событий?
1 ответ
Я нашел решение своей проблемы. ResumeLayout должен вызываться после того, как TabControl добавляет TabPage для правильной стыковки TabPage.
private DerivedTab CreateTab(string name)
{
DerivedTab tab = new DerivedTab(this, name);
tab.SuspendLayout();
MainTab.Controls.Add(tab);
tab.ResumeLayout();
return tab;
}