Закрытие дочернего элемента mdi в SplitContainer

Я разрабатываю приложение winforms и помещаю дочернюю форму mdi в splitcontainer.panel1. когда я хочу закрыть текущий дочерний элемент mdi, чтобы открыть другой, я не могу получить дочернюю форму. я использую этот код, чтобы открыть новый дочерний элемент, но я хочу, чтобы текущий дочерний элемент закрыл его:

            Accueil accueil = new Accueil();
            accueil.MdiParent = this;
            accueil.TopLevel = false;
            this.splitContainer1.Panel1.Controls.Add(accueil);
            accueil.WindowState = FormWindowState.Maximized;
            accueil.Size = this.splitContainer1.Panel1.ClientSize;
            accueil.MinimizeBox = false;
            accueil.MaximizeBox = false;
            accueil.ControlBox = false;
            accueil.Width = this.splitContainer1.Panel1.Width;
            accueil.Height = this.splitContainer1.Panel1.Height;
            accueil.Show();

person Imoum    schedule 19.03.2015    source источник


Ответы (1)


Помещение дочернего окна MDI в разделенный контейнер не имеет никакого смысла. Вы превращаете форму в простой элемент управления, устанавливая для свойства TopLevel значение false. Ссылку лучше не терять. Но вы, вероятно, опередите:

    while (splitContainer1.Panel1.Controls.Count > 0)
        splitContainer1.Panel1.Controls[0].Dispose();
    var accueil = new Accueil();
    accueil.TopLevel = false;
    accueil.Dock = DockStyle.Fill;
    accueil.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    accueil.Visible = true;
    this.splitContainer1.Panel1.Controls.Add(accueil);

Вместо этого рассмотрите возможность использования UserControl, это разумный подход с наименее вероятным долгосрочным замешательством.

person Hans Passant    schedule 19.03.2015
comment
Я должен подумать об этом с самого начала, теперь это работает. Спасибо. - person Imoum; 21.03.2015