2011-02-23 7 views
0

C#에서 두 개의 윈도우 폼 사이에 데이터를 전달하고 있습니다. Form1은 form2_textbox &에서 텍스트 상자 (form1_textbox)로 전달 된 텍스트를받는 기본 폼입니다.두 개의 폼간에 속성을 가진 데이터 전달하기

먼저 form1_button을 클릭하면 빈 텍스트 상자와 버튼으로 form1이 열리고 form2가 열립니다. Form2에서 form2_textbox &에 텍스트를 입력 한 다음 button2 (form2_button) 버튼을 클릭합니다.이 버튼의 이벤트를 클릭하면 양식 1의 텍스트 상자에 텍스트가 전송됩니다. & form1은 form2에서받은 텍스트로 빈 form1_textbox로 포커스가 이동합니다.

이 작업을 구현하기 위해 속성을 사용하고 있습니다. FORM2.CS

공공 부분 클래스 형식 2 : 양식 는 { //하는 형태로 2 공개 이벤트 핸들러 SomeTextInSomeFormChanged에서 이벤트를 선언;

public Form2() 
{ 
    InitializeComponent(); 

} 
public string get_text_for_Form1 
{ 
    get { return form2_textBox1.Text; } 
} 

//On the button click event of form2, the text from form2 will be send to form1: 

public void button1_Click(object sender, EventArgs e) 
{ 
    Form1 f1 = new Form1(); 
    f1.set_text_in_Form1 = get_text_for_Form1; 

//if subscribers exists 
if(SomeTextInSomeFormChanged != null) 
{ 
    SomeTextInSomeFormChanged(this, null); 
} 

} 

} 

Form1.cs를 Form2를에서

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public string set_text_in_Form1 
    { 
     set { form1_textBox1.Text = value; } 
    } 

    private void form1_button1_Click(object sender, EventArgs e) 
    { 
     Form2 f2 = new Form2(); 
     f2.Show(); 
     f2.SomeTextInSomeFormChanged +=new EventHandler(f2_SomeTextInSomeFormChanged); 
    } 

    //in form 1 subcribe to event 
    Form2 form2 = new Form2(); 

    public void f2_SomeTextInSomeFormChanged(object sender, EventArgs e) 
    { 
     this.Focus(); 

    } 
} 
+0

버튼 1 클릭으로 텍스트 상자 텍스트가 설정됩니다! 아마도 버튼 클릭 핸들러에'form1.Focus()'만 있으면됩니다. – VinayC

+0

[Duplicate 1] (http://stackoverflow.com/questions/13465158/). [Duplicate 2] (http://stackoverflow.com/questions/5087934/). [중복 3] (http://stackoverflow.com/questions/5088213/). [Duplicate 4] (http://stackoverflow.com/questions/9073267/). [중복 5] (http://stackoverflow.com/questions/20186722/). –

답변

3

당신은 이벤트를 생성하고 Form1에에에 가입해야합니다. 그게 다야.

//declare event in form 2 
public event EventHandler SomeTextInSomeFormChanged; 

// call event in form2 text_changed event 
if(SomeTextInSomeFormChanged != null) 
    SomeTextInSomeFormChanged(this, null); 

//in form 1 subcribe to event 
var form2 = new Form2(); 
form2.SomeTextInSomeFormChanged += SomeHandlerInForm1WhereYouCanSetForcusInForm1 

업데이트 :

형식 2 :

public Form2() 
{ 
    InitializeComponent(); 
} 

public void button1_Click(object sender, EventArgs e) 
{ 
//if subscribers exists 
    if(SomeTextInSomeFormChanged != null) 
    { 
    SomeTextInSomeFormChanged(form2_textBox1, null); 
    } 
} 

를 Form1 :

public partial class Form1 : Form { 

    public Form1() { InitializeComponent(); } 

    private void form1_button1_Click(object sender, EventArgs e) 
    { 
     Form2 f2 = new Form2(); 
     f2.Show(); 
     f2.SomeTextInSomeFormChanged +=new EventHandler(f2_SomeTextInSomeFormChanged); 
    } 

    public void f2_SomeTextInSomeFormChanged(object sender, EventArgs e) 
    { 
     var textBoxFromForm2 = (TextBox)sender; 
     form1_textBox1.Text = textBoxFromForm2.Text 
     this.Focus(); 
    } 
} 
+1

하위 폼의 생성자에서 기본 폼에 대한 참조를 전달하지 않으셔서 고맙습니다. 그러나 나는 당신의 반응이 OP를 너무 많이 도울 것이라고 생각하지 않습니다. 그들은 그들 스스로 이벤트를 사용하는 방법을 완벽하게 찾을 수 있습니다. +1 –

+0

@ Bugai13 : 선생님, 어떻게하면 좋을까요? 제발 제게 코드를주세요. – sqlchild

+0

@ Bugai13 : buton_Click은 코드에서 언급했듯이 생성 된 이벤트입니다. 그러나 form1에 가입하는 방법을 알려주십시오. – sqlchild

0

합니다.

((Form2)Application.OpenForms["Form2"]).textBox1.Text = "My Message"; 
관련 문제