2015년 9월 2일 수요일

c# 다른 클래스에서 폼 이벤트 조작방법

c#에서는 다른 클래스에서 메인 폼의 버튼이나 라벨, 혹은 또 다른 클래스의 함수를 제어하기 위해서 델리게이트라는 것을 사용한다. c와 c++은 포인터로 조작하지만 c#은 델리게이트라는 포인트형 함수같은걸 사용한다.

class1 에서 form1 에 있는 라벨 텍스트값을 조작해보는 방법을 간단하게 소개해보겠다.

class1
{
  //메인 폼에 있는 텍스트라벨을 갱신하기 위해 델리게이트 사용
  public delegate void uptext(string upLabelText); //델리게이트 선언
  public event uptext ReturnToText; //델리게이트 이벤트 선언

  private void labelToText()
  {
    ReturnToText("연결이 잘 되나 보자");//이벤트 호출
  }
}

form1
{
  public Form1()
  {
    InitializeComponent();
    class1 cl = new class1(); //class1을 동적할당
    cl.ReturnToText += new cl.uptext(UpdateText_set);//이벤트 핸들러 연결

    cl.labelToText();//이벤트 호출 값을 지닌 함수 호출
  }
  private void UpdateText_set(string upLabelText)
  {
    UpdateText.Text = upLabelText;//라벨의 텍스트 값 변경
  }
}

이걸 잘 응용하면 폼과 폼 끼리 클래스와 클래스끼리 폼과 클래스끼리 데이터를 주고 받을 수 있으니 응용하기 나름인 것 같다.
위 방법을 응용해서 ShiningLoreLauncher 프로그램에서 업데이트 할 때 업데이트 클래스에서 출력되는 이벤트 텍스트 값을 메인 폼에 출력할 수 있었다.

댓글 없음:

댓글 쓰기