Стыковка инкапсулированного элемента управления

У меня есть инкапсулированный контроль в производном 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;
}
Другие вопросы по тегам