2016-11-17 6 views
-1

Я работаю над приложением Windows. У меня есть MainForm (Родитель) и несколько childForm. Существует список в MainForm, который содержит список имен childForm, и, щелкнув по каждому имени в списке, отобразится соответствующий childForm, и предыдущая дочерняя форма закрывается.Как открыть дочернюю форму из другой дочерней формы?

Я использую эти коды, чтобы показать childForm и закрыть предыдущий childForm в MainForm.cs (ParentForm):

CloseForms(); 
frm_draft = new frm_ShowDraft(); 
frm_draft.MdiParent = this; 
frm_draft.Show(); 

CloseForm() представляет собой метод, который проверяет, что является childForm и запущенным закрывает его. Пока все хорошо.

В одной из детских фигур есть кнопка. Когда пользователь нажимает на него, он должен закрыть этот childForm и показать другое. Но когда я нажимаю на кнопку, childForm2 показывает из MainForm. Как я могу показать его внутри MainForm?

Мой код в случае нажатия кнопки:

this.close(); 
frm_c2 = new frm_child2(); 
frm_c2.MdiParent = new MainForm().ParentForm; /// Or this.MdiForm 
frm_c2.Show(); 
+0

Если это '' C# почему вы использовали 'VB.NET' тег? – Bugs

+0

Посмотрите [здесь] (http://stackoverflow.com/questions/8566582/how-to-centerparent-a-non-modal-form/8566716#8566716). – dee

+0

@ Jinx88909 VB.NET тег? – saedbfd

ответ

0

http://www.independent-software.com/weifenluo-dockpanelsuite-tutorial-cookbook/

Чтобы показать ребенку формы в главной форме использовать библиотеку WeiFen Ло. Этого контроля будет сделать проще состыковать формы в главной форме Visual Studio экранов стыковочных

формы с 3 формой внутри:

enter image description here

Убедитесь, что опора IsMdiContainter верно.

enter image description here

Пример:

public Form1() 
{ 
    InitializeComponent(); 

    Form2 f2 = new Form2(); // create new form 

    // dockPanel is an control from WeiFen Luo more info see the link 
    // dockPanel control is docked in your mainform. 
    // this will open Form2 in the dockPanel and align it left 
    f2.Show(dockPanel, DockState.DockLeft); 

} 

Другие варианты стыковки:

  1. DockState.Fill доки образуют в более чем отверстие DockPanel
  2. DockState.Right доков образуют в RightSide доков DockState.Top DockPanel
  3. образуют в надводной части DockPanel

для получения дополнительной опции проверить ссылку Этот контроль будет Генделя responsifnes стыковки форм и будет обрабатывать выделение вычислений позиционирования для вас.

+0

yes i set IsMdiContainer = True – saedbfd

+0

что делать, если вы попробуете ShowDialog() вместо .Show(); –

+0

, но я хочу показать childForm внутри MainForm. ShowDialog() открывается как родительский, а не дочерний. – saedbfd

2

Вы должны установить тот же MDIForm и позвонить Закрыть в конце:

frm_c2 = new frm_child2(); 
frm_cLetter.MdiParent = this.MdiParent; 
frm_cLetter.Show(); 
this.Close(); 
+0

Моя проблема в том, что childForm2 показывает родительскую форму, а не childForm. как я могу показать childForm2 как childForm внутри MainForm? – saedbfd

+0

положите это.Закрыть() после frm_cLetter.Show() – Shadowed

+0

i put this.Close() в конце. но показывает childForm2 из MainForm еще – saedbfd