2012-01-04 5 views
0

Моя программа имеет несколько форм. Некоторым из этих форм было бы полезно получить возможность общаться друг с другом, однако, если Form1 создает экземпляр Form2, Form2 не может перезвонить Form1, по крайней мере, не очень легко.Могу ли я использовать свои формы как Static?

Допустимо ли статические формы, чтобы они могли разговаривать друг с другом без необходимости создавать объекты этих классов во всем мире?

+4

Короткий ответ: НЕ ДЕЛАЙТЕ ЭТО –

+1

@ KarmicCoder: Согласен, используя статику/синглтоны, возникает много проблем с точки зрения безопасности потоков. –

+0

«перезвонить» легко выполнить * без * ссылки. Используйте событие. –

ответ

3

Однако если Form1 создает экземпляр Form2, Form2 не может перезвонить Form1, по крайней мере, не очень легко

Да, это может - просто сделать свой Form2 экземпляр знать о экземпляре Form1, например через конструктор:.

// In Form1 
Form2 form2 = new Form1(this); 

(Обратите внимание, что если ваши классы действительно называется Form1 и Form2, это стоило бы дать им более семантически значимые имена Отклонить искушению придерживаться с тем, что Visual Studio дает вам :)

Я настоятельно рекомендую против, используя статику, чтобы избежать предоставления вашей зависимости напрямую.

+0

Проклятия. Я был Skeeted! – WOPR

+0

Хорошая информация. Формы не называются Form1 и Form2, это были, например, сакэ. Я буду работать над использованием конструкторов, как указано для достижения того, что мне нужно. –

0

Я никогда не создавал статические формы .. обычно я просто создать несколько глобал для моих форм экземпляров ...

Вы также можете получить доступ к другим формам собственности, хотя .parent текущей формы так долго, как вы проходите вызывающую форму в методах .Show (form) или .ShowDialog (form).

0

Изменить конструктор формы 2 следующим образом

public Form2(Form form1) 
{ 
    _parentForm = form1; 
} 

Теперь у вас есть ссылка на Form1.

Смежные вопросы