2010-05-15 2 views
1

프로젝트를 폼 대신 클래스를 통해 시작하려면이 방법이 있습니까? 아니면 프로그램을 제외한 첫 번째 클래스가 시작된 클래스인지 확인하는 좋은 방법이 있습니다.C# - 양식 대신 클래스로 프로젝트를 시작할 수 있습니까?

Program.main()에서 내 클래스로 변경하려고했지만 Application.run()에 ApplicationContext가 필요합니다.
나는 다른 클래스를 시작하고 그 클래스가 Application.run()으로 폼을 시작하도록 프로그램 클래스를 변경할 수 있다고 생각하지만 같은 폼을 원하지 않기 때문에 많은 문제가 발생할 것이라고 생각한다. 매번 처음 시작할 때 Application.run()을 한 번 이상 최대 한 번 사용해야합니다. 그래서 Application.run()이 사용되었는지 여부를 추적하는 것이 어려울 것이라고 생각합니다.

더욱 중요한 또 다른 질문입니다. 이것은 .net에서 일을하는 좋은 방법인가? 내가 그렇게하고 싶은 이유는 내가 MVC 프로젝트의 일종을 만들고 싶기 때문이다. 내가 시작하고자하는 클래스는 컨트롤러이고 내가 사용할 모든 폼은 뷰가 될 것이다.

+0

달성하려는 기능을 설명해 주실 수 있습니까? –

+2

"수업 시작"을하지 마십시오. 런타임은 특정 메소드 (Main)를 시작합니다. 그 방법은 당신의 통제하에 있습니다. –

+0

정확히 @Henk이 말한 것. 사실,이 메서드는 폼을 발생 시키지만, 모든 폼을 수정할 수 있습니다. 콘솔 프로젝트로 놀아보십시오;) – Dykam

답변

1

컨트롤러의 샘플 구현 :

public class Controller : ApplicationContext { 
    public Controller() { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     mInstance = this; 
    } 
    public Controller Instance { get { return mInstance; } } 
    public void Start() { 
     Application.Run(this); 
    } 
    public void Exit() { 
     this.ExitThread(); 
    } 
    public void CreateView(Form frm) { 
     Views.Add(frm); 
     frm.FormClosed += FormClosed; 
     frm.Show(); 
    } 
    private void FormClosed(object sender, FormClosedEventArgs e) { 
     Views.Remove(sender as Form); 
     // NOTE: terminate program when last view closed 
     if (Views.Count == 0) Exit(); 
    } 
    private List<Form> Views = new List<Form>(); 
    private Controller mInstance; 

} 

당신이처럼 사용할 수 있습니다

static class Program { 
    [STAThread] 
    static void Main() { 
     var c = new Controller(); 
     c.CreateView(new Form1()); 
     c.Start(); 
    } 
} 

는 또한 컨트롤러를위한 좋은 기본 클래스로 WindowsFormsApplicationBase 클래스를 확인하십시오. 싱글 톤 앱 및 스플래시 화면을 잘 지원합니다.

1

먼저 실행할 클래스를 결정하려면 해당 클래스에있는 응용 프로그램의 Main 메서드를 넣으면됩니다. 다음과 같이

가 실행 창을 그러니까 기본적으로, Main 메서드에 넣어 새로운 클래스를 생성 (및 Program.cs에서 제거) 당신이 필요로하는 로직을하고 :

[STAThread] 
    static void FormLauncher() 
    { 
     Application.EnableVisualStyles(); 
     Application.Run(new Form1()); 
    } 

Form1에이 이름입니다 시작되어야하는 형태의

관련 문제