2016-12-22 1 views
4

좋아, 이건 내 첫 번째 windows 양식 응용 프로그램이고 나는 내 코드를 재구성하는 데 어려움을 겪고있다. 기본적으로 제공되는 Form1 클래스의 모든 것을 퍼팅하기 시작 했으므로 빠르게 커졌습니다. 저는 이것이 꽤 나쁜 프로그래밍 습관이라는 것을 알고 있습니다. 그래서 저는 약간의 정리 작업을 시작했고, 단일 책임 원칙을 만족시키기 위해 다른 클래스를 만들었습니다. 그러나 일부 버튼 관련 이벤트 및 그리드 관련 이벤트는 Form1 클래스에서 잘 작동하기 때문에 바깥으로 가져 가면 충돌이 발생하고 어떻게 수행해야하는지 알 수 없습니다.windows forms organize code

public partial class Form1 
{ 


    public Form1() 
    { 
     InitializeComponent(); 

    } 

    private void method1(object sender, EventArgs e) 
    { 
      //CODE 
    } 



    private void method2(object sender, DataGridViewCellEventArgs e) 
    { 
      //CODE 
    } 



    private void method3(object sender, EventArgs e) 
    { 
      //CODE 
    } 

} 

그래서 나는 method1, method2, method3 등 다른 클래스 (또는 다른 클래스)로 이동하고 싶습니다,하지만 꽤 많은 응용 프로그램을 파괴하지 않고이 작업을 수행하는 방법에 잃었다. 음, 개인은 명백하게 액세스 권한을 부여하기 위해 public으로 설정되어 있지만 나중에 Form1 클래스에서이 메소드를 호출하는 방법을 알지 못합니다. 새 클래스를 만들고 이벤트에서 메서드를 호출하려고하면 onClick: Newclass.method1()처럼 작동하지 않습니다. 내가 생각할 수있는 한 가지는 Form1 onClick: thisMethodCallsTheOneINeedInADifferentClass()에서 몇 가지 방법을 호출하는 것과 비슷하지만, 서투른 해결책 인 것 같습니다 ... 이것을 해결할 수있는 더 좋은 방법이 있다고 확신합니다. 어떻게 해야할지 모르겠습니다. 조언 감사, 감사합니다

+1

양식 내에 이벤트 처리기를 두는 것이 좋습니다. – stuartd

+0

'작동하지 않는다'는 의미를 더 잘 정의하면 필요한 답을 얻는 것이 더 나을 것입니다. 컴파일러 오류? 추락? 예외? –

답변

3

이벤트 처리기를 양식에 보관해야하지만 다른 클래스로 코드를 이동할 수 있습니다. 수업에 전화하고 싶으면 직접 전화하지 않아도됩니다. 다음과 같이해야합니다.

YourClass class1 = new YourClass(); 

정적이라고 선언하면 한 번만 호출하면됩니다.

private static YourClass class1 = new YourClass(); 

그럼 당신은 이런 식으로 당신의 방법을 사용할 수 있습니다 :

class1.YourMethod(); 
+0

또는 메소드를 정적으로 설정하십시오. –

+0

그래, 그게 더 나은 해결책이 될거야. 나는 내 대답 – nicoh

+0

을 추천 해 주셔서 감사합니다. 이것은 이것이 취한 경로이며 예상대로 작동합니다. 나는 클래스를 정적으로 만들지는 않았지만 그것을 인스턴스화했다. 건배 – mihocu

0

사람들은 버튼 이벤트에 대한 이벤트 처리기입니다. 다른 곳에서 메서드를 지정하려면 이벤트 처리기를 코드 뒤에 수동으로 에 연결해야합니다.

지금 선까지의 코드는 디자이너 파일에

, 당신은 같은 것을 볼 수 있습니다 :

button1.Click += new System.EventHandler(method1); 

을 나는 그것이 이벤트 처리기 뒤에 그냥 코드에서 할 수있는 괜찮은지 말 것 다른 곳에서 작성한 다른 클래스의 규칙 방법을 호출하십시오. 어떤 코드가 코드 뒤에 생겨나는 것은 부끄러운 일이 아닙니다.

하루의 끝에 디자이너가 올바른 이벤트 처리기를 가리켜 야하고 Form1.cs 클래스 밖으로 이동하면 올바른 위치를 가리켜 야합니다.