2013-09-25 1 views
1

Я создаю приложение формы Windows в visual studio 2010, используя C#, который был в форме mdi. Мне уже удалось подключить дочерние формы к соответствующим элементам управления полосой меню в родительской форме mdi, однако я хочу состыковать эти дочерние формы mdi с размером родительского mdi, а также автоматически закрыть их, когда будет открыта другая дочерняя форма mdi, используя другое управление полосой меню.закрыть ребенка mdi C# с помощью главного меню управления полосой на родительском mdi

Например, у меня есть элемент меню, называемый Tile Model, и он вызывает/открывает специальную дочернюю форму при нажатии. Когда я нажал на другой элемент меню, скажем, называется Accounts, дочерняя форма, вызванная элементом меню модели Tile, должна автоматически закрыться и откроется дочерняя форма, вызванная элементом меню «Учетные записи».

Обратите внимание, что я установил стиль рамки формы как «none».

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

здесь выдержка из моего кода.

общественный частичный класс Form1: Form { общественного Form1() { InitializeComponent(); }

private void manageTileModelToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     ManageTileModel ChildForm = new ManageTileModel(); 
     ChildForm.MdiParent = this; 
     ChildForm.Show(); 

    } 

    private void startInspectionToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     StartInspection ChildForm = new StartInspection(); 
     ChildForm.MdiParent = this; 
     ChildForm.Show(); 


    } 

    private void manageTestReportsToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     ManageTestReports ChildForm = new ManageTestReports(); 
     ChildForm.MdiParent = this; 
     ChildForm.Show(); 
    } 

    private void registerNewAccountToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     RegNewAccount ChildForm = new RegNewAccount(); 
     ChildForm.MdiParent = this; 
     ChildForm.Show(); 
    } 

    private void manageAccountsToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     ManageAccounts ChildForm = new ManageAccounts(); 
     ChildForm.MdiParent = this; 
     ChildForm.Show(); 
    } 

    private void inspectionToolStripMenuItem1_Click(object sender, EventArgs e) 
    { 
     GenHelpInspection ChildForm = new GenHelpInspection(); 
     ChildForm.MdiParent = this; 
     ChildForm.Show(); 
    } 

    private void tileModelToolStripMenuItem1_Click(object sender, EventArgs e) 
    { 
     GenHelpTileModel ChildForm = new GenHelpTileModel(); 
     ChildForm.MdiParent = this; 
     ChildForm.Show(); 
    } 

    private void accountsToolStripMenuItem1_Click(object sender, EventArgs e) 
    { 
     GenHelpAccounts ChildForm = new GenHelpAccounts(); 
     ChildForm.MdiParent = this; 
     ChildForm.Show(); 
    } 

    private void aboutToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     About ChildForm = new About(); 
     ChildForm.MdiParent = this; 
     ChildForm.Show(); 
    } 

А ответ будет очень полезно, и я действительно ценю это. :) спасибо.

ответ

0

Если вы хотите отобразить только одного родителя MDI, как насчет использования частного поля для хранения последнего отображаемого дочернего элемента. Затем вы можете написать метод, как это:

private void HideLastChild() { 
    if(_lastChild != null) 
     _lastChild.Close(); 
} 

и назвать его перед ChildForm.Show(), конечно, вы должны также обновить _lastChild поле:

ChildForm.Show(); 
_lastChild = ChildForm; 

Вы можете объединить все отображения операций в один общий метод:

private void ShowChild<TWindow>() where TWindow: Form, new() { 
    var child = new TWindow(); 
    HideLastChild(); 
    _lastChild = child; 
    child.MDIParent = this; 
    child.Show(); 
} 

ShowChild<About>();