본문 바로가기

Programming/C#-Winform

[펌]C# winform 폼 간 데이터 전달

출처 : http://blog.naver.com/PostView.nhn?blogId=shk101n&logNo=40034972962&redirect=Dlog&widgetTypeCall=true

 

A라는 폼이 B라는 폼을 호출하고, B폼의 데이터 입력값을 A폼에 전달해야 하는 경우가 있지요.

이때 B폼에서는 단순히 A폼에 값만 전달하는 것이 아니라 A폼에 모든 멤버(변수, 컨트롤등)에 접근할 수 있으면 더 좋겠죠.

 

이렇게 하기 위해서는 A폼에 호출할 수 있는 함수를 public으로 만들거나, 아니면 직접 접근하려하면 컨트롤 같은 멤버를 public으로 하면 됩니다.

 

그리고 그전에 A폼과B폼을 연결할 수 있도록 해야 하는데, 두 가지 방법이 있습니다.

하나는 B폼에 A를 참조하는 인스턴스 변수를 public으로 만들거나, 또 하나는 form의 Owner속성을 이용하는 방법 입니다.

 

여기서는 form 의 Owner속성을 이용하는 방법을 설명하겠습니다.

A 폼에 텍스트박스가 있고, 호출된 B폼에서 버튼을 클릭 했을 때 A폼의 텍스트 박스에 값을 입력한다고 가정하겠습니다.

 

먼저 A폼의 TextBox1를 속성창에서 Modifiers 속성을 public으로 합니다.

이렇게 하면 이 컨트롤은 public으로 선언됩니다.

 

그리고 A폼의 button 클릭시 B폼을 호출하는데, 다음과 같이 B폼의 owner에 this(A폼)을 지정합니다.

 

private void Abutton1_Click(object sender, EventArgs e)

{

B fb = new B();

fb.Owner = this; //A폼을 지정하게 된다.

fb.Show(); //B폼을 연다.

}

 

그리고 B폼에서 button 클릭시 자기의 Owner를 A폼으로 받아서 A폼의 텍스트 박스에 값("from B from")을 입력합니다.

 

private void Bbutton_Click(object sender, EvnetArgs e)

{

A fa = (A)this.Owner; //Owner를 A폼으로 형변환한다.

//A폼의 TextBox1이 public으로 선언되어 있기 때문에 접근이 가능하다.

fa.TextBox1.Text = "from B from";

}

 

이렇게 하면 두 폼이 보이는 상태에서 실시간으로 A폼의 텍스트박스에 값이 입력되는 것을 보실 겁니다.

이런식으로 한 쪽에서 다른 쪽을 얼마든지 핸들링 할 수 있습니다.