2015-04-28 4 views
0

У меня есть 3 формы. Второй - для отображения справки, третий - модальный диалог.Открыть вторую форму из третьей формы

В Form1 у меня есть:

Form2 HelpForm = new Form2(); 
Form3 EditForm = new Form3(); 

и меню Справка, которая просто делает:

HelpForm.Show(); 

Я хотел бы показать HelpForm также от контроля в Form3. Как я могу это сделать?

+2

Не можете просто создать экземпляр 'HelpForm' в обработчик событий в' Form3'? –

ответ

0

Пропустить HelpForm объект в конструкторе EditForm и назначить его в частной переменной. При необходимости вызовите show, используя переменную.

Form2 HelpForm = new Form2(); 
Form3 EditForm = new Form3(HelpForm); 
..... 
EditForm.ShowHelp(); 

С в Form3:

Class Form3 
{ 
    private Form2 helpForm = null; 

    public Form3(Form2 HelpForm) 
     { 
      helpForm = HelpForm; 
     } 

     public void ShowHelp() 
     { 
      helpForm.Show(); 
     } 
    } 
+0

Большое спасибо за ответы. –

+0

Фактически, я понял, что открытие EditForm как модальное не было адекватным. Мне нужно обратиться за помощью во время редактирования, и было невозможно иметь HelpForm под EditForm и выше Form1. Я открываю его как немодальный и просто отключая некоторые команды в Form1, пока он открыт, поэтому меню справки всегда доступно. –

1

помощь является своего рода глобальным и (если ваше приложение растет) она должна быть доступна в любом месте. Так может быть (вид) Singleton для вашей справки может помочь!

class Help 
{ 
    private static Form helpForm = null; 
    static void ShowHelp { 
    if (helpForm == null) 
     helpForm = generateHelpForm(); //TODO implement 

    helpForm.Show(); 
} 

к нему доступ из любой точки мира ...

// somewhere in formx 
Help.ShowHelp(); 
0

В качестве опции можно использовать Application.OpenForms

FormCollection fc = Application.OpenForms; 

if (fc.OfType<Form3>().Any()) 
{ 
    fc.OfType<Form3>().First().Show(); 
} 
Смежные вопросы