2009-07-15 6 views
1

양식을 표시하는 방법에 대해 혼란스러워합니다. Windows Forms 응용 프로그램을 만들면 Show 메서드를 명시 적으로 호출하지 않아도 기본 Form1이 자동으로 표시됩니다. 그러나 다른 Form을 표시하고 표시되도록하려면 Show를 호출하여 표시 할 수 있도록해야합니다.Windows Forms 가시성 문제

왜 그런 차이가 있습니까?

VSTS 2008 + C# + .Net 2.0을 사용하고 있습니다.

답변

2

이는 Form1이 응용 프로그램의 기본 양식이기 때문입니다. 특히 Application.Run 메서드로 전달되어 Form1이 기본 폼으로 할당 된 ApplicationContext 개체를 만듭니다. 응용 프로그램이 시작되면 ApplicationContext에 기본 폼이 있는지 확인한 다음 해당 양식의 Visible 속성이 true으로 설정되어 양식이 표시됩니다.

public static void Run(Form mainForm) 
{ 
    ThreadContext.FromCurrent().RunMessageLoop(-1, new ApplicationContext(mainForm)); 
} 

RunMessageLoop하는 메시지 루프를 설정하는 또 다른 내부 함수를 호출 할 것이고, 그 함수에서 우리는 다음 찾기 :

if (this.applicationContext.MainForm != null) 
{ 
    this.applicationContext.MainForm.Visible = true; 
} 

또는은,이 Application.Run 인 코드로 표현 이것은 Form1을 보여주는 것입니다.

또한 시작시 Form1 폼이 자동으로 표시되지 않도록하는 방법에 대한 힌트를 제공합니다.

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    // create the form, but don't show it 
    Form1 form = new Form1(); 
    // create an application context, without a main form 
    ApplicationContext context = new ApplicationContext(); 
    // run the application 
    Application.Run(context); 
} 
+0

감사합니다. Fredrik, 게시 한 코드 블록은 어디에 있습니까? – George2

+1

나는 Red Gate의 Reflector를 사용했다 : http://www.red-gate.com/products/reflector/ –

+0

멋지다. Show와 Visible을 true로 설정하는 것의 차이점은 무엇인가? – George2

4

VS가 생성하는 "Program.cs"파일을보십시오.

static class Program { 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); // and especially this line :) 
    } 
} 
+0

안녕 Stormenet, 내가보기 당신이 인용 한 코드에서 호출 찾을 수 없습니다 : 우리가해야 할 일은 Form1에가 ApplicationContext에서 기본 폼으로 지정하지 않고 응용 프로그램을 시작하는 방법을 찾는 것입니다. 더 이상의 힌트? – George2

+0

Application.Run에서 Show를 호출합니다. 기본적으로이 줄은 응용 프로그램의 초기 양식이 Form1임을 나타냅니다. 다른 시작 양식을 표시하려면 해당 행을 변경하십시오. – Stormenet

1

왜냐하면 form1은 Application.Run (new form1())에 의해 호출되는 기본 양식이기 때문입니다.

이 코드는 program.cs 파일에서 찾을 수 있으며 어떤 형식이든 변경할 수 있습니다.

+0

아메드, 새로운 Form을 새로 작성한 다음 Form2 form2 = new Form2()를 사용하여 양식을 작성하면 form2가 표시되지 않습니다. 이 코드는 VSTS가 Program.cs에서 생성 한 코드와 같으며 Form2가 표시되지 않는 이유를 모르겠습니다. – George2