2013-04-19 3 views
2

Я пытаюсь одновременно отображать 2 разных формы. Я пробовал следующий код, но он не работает:Запуск различных форм сразу

Form1 t1 = new Form1(); 
Form2 t2 = new Form2(); 
t2.Show(); 
t1.Show(); 

Application.Run(); 

Я также попытался запустить первый из Program.cs, а другой из Form1_Load:

private void Form1_Load(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2(); 
    form2.Show(); 
} 

Это не работает либо ,

Что я делаю неправильно? Как я могу запускать несколько форм одновременно?

+1

нет ничего плохого в вашем коде, как должен работать правильно –

+2

Когда вы говорите «не работает», что вы ожидали и что на самом деле произошло? –

ответ

6

Вы можете создать новый ApplicationContext для представления нескольких форм:

public class MultiFormContext : ApplicationContext 
{ 
    private int openForms; 
    public MultiFormContext(params Form[] forms) 
    { 
     openForms = forms.Length; 

     foreach (var form in forms) 
     { 
      form.FormClosed += (s, args) => 
      { 
       //When we have closed the last of the "starting" forms, 
       //end the program. 
       if (Interlocked.Decrement(ref openForms) == 0) 
        ExitThread(); 
      }; 

      form.Show(); 
     } 
    } 
} 

Использование, что теперь вы можете написать:

Application.Run(new MultiFormContext(new Form1(), new Form2())); 
+4

+1 И сегодня я узнал, как использовать ApplicationContext! SO никогда не перестает удивлять меня ... – Abhinav

+0

Это прекрасно работает. Спасибо! –

+0

@Abhinav, я использовал это много раз сам. Это здорово для того, чтобы вы могли запускать приложение с помощью значка уведомлений, не пытаясь скрыть форму, содержащую значок! При этом вы можете разделить значок и форму (ы)! – Joshua

0

Надежда ваш Program.cs выглядит следующим образом:

static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 

    } 

и попробовать это в Form1:

private void Form1_Load(object sender, EventArgs e) 
    { 
     Form2 form2 = new Form2(); 
     form2.Show(); 
    } 
+0

Обратите внимание, что если вы сделаете это закрытие, первая форма закончит приложение, но закрытие второй формы не будет. – Servy

+0

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

+0

Убедитесь, что событие загрузки Form1 имеет форму Form1_Load в качестве подписчика. –

0

При создании нового приложения Windows Forms для C# в Visual Studio это поможет вам работать с единственная форма, а затем вы можете добавить больше форм в свою основную форму. В качестве бонуса вы получите дизайнера для своей основной формы, где вы можете перетаскивать элементы управления.

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