Проблема C # WinForms MDI

#c# #winforms #mdi

#c# #winforms #mdi

Вопрос:

Здравствуйте, ребята, у меня есть одна проблема, у меня есть 1 родительская форма и 3 дочерних, я просто хочу открыть их в развернутом виде, но когда я делаю это, в левой части появляются эти 3 элемента управления. Как я могу открыть одну форму без этого элемента управления. Если я делаю это неправильным способом, пожалуйста, посоветуйте мне, что mdi подходит для таких вещей?

пожалуйста, посмотрите на эти фотографии http://img440.imageshack.us/img440/6831/mdinz.jpg http://img139.imageshack.us/img139/4687/mdi1.jpg

Комментарии:

1. Я предполагаю, что что-то не так, но какой-нибудь код мог бы помочь, как вы вызываете дочернюю форму, здесь есть 1 форма MDI? когда вы имеете в виду 3 элемента управления, вы имеете в виду максимизировать, минимизировать .. кнопки?

2. По скриншотам я могу понять, что английский, вероятно, не является вашим родным языком, но было бы полезно, если бы вы могли сформулировать свой вопрос намного более четко. В чем проблема на скриншотах?

3. Да, я имею в виду максимизировать, минимизировать и закрыть. это код: Inventory invent = новая инвентаризация(); invent.MdiParent = это; invent. WindowState = FormWindowState.Развернутый; изобретать. Dock = док-стиль. Заполнять; изобретать. Показать();

4. invent.MdiParent = this…is «этот» потомок другой родительской формы mdi? Я думаю, вы можете избежать этих кнопок, если не используете какие-либо сторонние инструменты. Я использую DevExpress XtraTabMdiContainer для такого рода заданий. Единственная проблема, которую я вижу в вашем примере, заключается в том, что 3 кнопки повторяются 3 раза!? 1 для основной формы, 1 для родительской? и последнее для дочернего элемента. Значит, ваша основная форма отличается от родительской формы MDI!???

Ответ №1:

Это известная ошибка в реализации MDI, срабатывающая при создании развернутого дочернего окна в родительском конструкторе. Это пример:

 public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        var child = new Form2();
        child.MdiParent = this;
        child.WindowState = FormWindowState.Maximized;
        child.Show();
    }
}
  

Вы увидите, что глифы min / max / restore отображаются дважды, при восстановлении дочернего окна на экране остается панель MDI, как и на вашем первом снимке экрана. Обходной путь заключается в перемещении дочернего кода создания в метод OnLoad(). Вот так:

 public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
    }
    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        var child = new Form2();
        child.MdiParent = this;
        child.WindowState = FormWindowState.Maximized;
        child.Show();
    }
}
  

Ответ №2:

При желании вы можете использовать свойства ControlBox, FormBorderStyle, MaximizeBox и MinimizeBox для удаления различных элементов пользовательского интерфейса window из формы.