Родительская форма для панели - PullRequest
6 голосов
/ 20 декабря 2010

У меня есть форма с видом на дерево с одной стороны.В зависимости от того, какой узел выбран, я хочу отображать различный контент справа.Чтобы обеспечить управляемость кода и элементов управления, я планировал изолировать контент в отдельные формы и отобразить форму на панели.

В своем событии TreeView AfterSelect я попытался создать экземпляр формы и назначить ее родительским для панели.но я получаю исключение «Элемент управления верхнего уровня не может быть добавлен в элемент управления.»:

Form frmShow = new MyForm();
frmShow.Parent = this.pnlHost;

Это не конфигурация MDI, но я попытался установить свойство формы MdiParent в родительскую форму, а затемустановка свойства Parent формы на панель, но я получаю исключение "Форма, которая была указана как MdiParent для этой формы, не является MdiContainer. Имя параметра: значение":

Form frmShow = new MyForm();
frmShow.MdiParent = this;
frmShow.Parent = this.pnlConfigure;

Я не могу установитьформа как Контейнер MDI, потому что это не форма верхнего уровня, это фактически форма, которая закреплена внутри родительской формы (с помощью библиотеки стыковки WeifenLuo).

Существует ли какой-либо способ для родительской формы впанель в среде без MDI?

Ответы [ 5 ]

20 голосов
/ 20 декабря 2010

Только для записи, это возможно. Вы можете превратить форму в дочерний элемент управления, установив для его свойства TopLevel значение false. Как это:

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) {
        switch (e.Node.Name) {
            case "Node0": embedForm(new Form2()); break;
            // etc..
        }
    }
    private void embedForm(Form frm) {
        // Remove any existing form
        while (panel1.Controls.Count > 0) panel1.Controls[0].Dispose();
        // Embed new one
        frm.TopLevel = false;
        frm.FormBorderStyle = FormBorderStyle.None;
        frm.Dock = DockStyle.Fill;
        frm.Visible = true;
        panel1.Controls.Add(frm);
    }

Пользовательский элемент управления имеет меньше накладных расходов.

3 голосов
/ 20 декабря 2010

Вам лучше создать каждую панель как UserControl. Это как формы, но без оконных элементов.

3 голосов
/ 20 декабря 2010

и отображение формы внутри панели

Нет, не делайте этого.Используйте UserControls вместо форм.Создание / проектирование UserControl работает так же, как форма, и это решит все ваши проблемы (здесь).

2 голосов
/ 11 мая 2012
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
    ucAdmin ucA = new ucAdmin(); //ucAdmin is a user control u had created.
    ucA.Visible = true;
    ucA.Dock = DockStyle.Fill;

    this.pnlMain.Controls.Clear(); // pnlMain is the location u are going to display this user control.
    this.pnlMain.Controls.Add(ucA);
}
1 голос
/ 20 декабря 2010

Установите frmShow.TopLevel = false, если вы по-прежнему хотите использовать форму вместо UserControl по какой-либо причине.

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