양식을 표시하는 방법에 대해 혼란스러워합니다. Windows Forms 응용 프로그램을 만들면 Show 메서드를 명시 적으로 호출하지 않아도 기본 Form1이 자동으로 표시됩니다. 그러나 다른 Form을 표시하고 표시되도록하려면 Show를 호출하여 표시 할 수 있도록해야합니다.Windows Forms 가시성 문제
왜 그런 차이가 있습니까?
VSTS 2008 + C# + .Net 2.0을 사용하고 있습니다.
양식을 표시하는 방법에 대해 혼란스러워합니다. Windows Forms 응용 프로그램을 만들면 Show 메서드를 명시 적으로 호출하지 않아도 기본 Form1이 자동으로 표시됩니다. 그러나 다른 Form을 표시하고 표시되도록하려면 Show를 호출하여 표시 할 수 있도록해야합니다.Windows Forms 가시성 문제
왜 그런 차이가 있습니까?
VSTS 2008 + C# + .Net 2.0을 사용하고 있습니다.
이는 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);
}
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 :)
}
}
왜냐하면 form1은 Application.Run (new form1())에 의해 호출되는 기본 양식이기 때문입니다.
이 코드는 program.cs 파일에서 찾을 수 있으며 어떤 형식이든 변경할 수 있습니다.
아메드, 새로운 Form을 새로 작성한 다음 Form2 form2 = new Form2()를 사용하여 양식을 작성하면 form2가 표시되지 않습니다. 이 코드는 VSTS가 Program.cs에서 생성 한 코드와 같으며 Form2가 표시되지 않는 이유를 모르겠습니다. – George2
감사합니다. Fredrik, 게시 한 코드 블록은 어디에 있습니까? – George2
나는 Red Gate의 Reflector를 사용했다 : http://www.red-gate.com/products/reflector/ –
멋지다. Show와 Visible을 true로 설정하는 것의 차이점은 무엇인가? – George2