'C# 폼간 데이터 전송'에 해당되는 글 1건

728x90

자식폼에서 메인폼으로 값을 전달하는 방법으로
public 을 선언하여 넘겨주는 방법만 사용했었는데 이번에 검색해서 좋은 정보를 알게되었다.

배운지도 얼마 안되고 독학을 하다보니 C# 기능을 제대로 몰라서 애로사항이 많다.

몇번 더 적용해보면 확실하게 내것이 될 수 있을 거 같다.

(작성일자 : 2015.11.29) -- delegate 를 제대로 이해하지 못한 상태에서 작성한 자료


목적1 : 자식폼(Form2) 에서 메인폼으로 데이터 전달


=== 자식폼에서 설정하는 것들 =====
public delegate void Form2_EventHandler(string data); // string 을 반환값으로 같은 대리자를 선언
public event Form2_EventHandler TextSendEvent// 대리자 타입의 이벤트 처리기를 설정

// 클릭하여 실제 전달되는 값
TextSendEvent(dlgOpen.FileName.ToString()); // 스트링값을 메인폼에게 보내줌


=== 메인폼에서 설정하는 것들 ===
// 자식폼(Form2)를 띄우는 이벤트
private void pictureBoxOpen_Click(object sender, EventArgs e)
{
    foreach (Form openForm in Application.OpenForms)
    {
        if (openForm.Name == "Form2") //폼 중복 열기 방지
        {
            openForm.Activate();
            return;
        }
    }

    Form2 frm2 = new Form2();

    // 자식폼이 가지고 있는 TextSendEvent 이벤트 처리기에 frm2_getTextEvent 이벤트 연결

    frm2.TextSendEvent += new Form2.Form2_EventHandler(frm2_getTextEvent);
    frm2.Show();  // 자식폼이 활성화된  상태에서 값을 전달받기 위해서
}

void frm2_getTextEvent(string text)
{
    // 값을 넘겨 받아서 실제 처리할 함수
    CurrentData = text; // Form2 에서 넘겨받는 값
}


참고한 자료는 http://blog.naver.com/kjh258999/20043308380 이며, 테스트를 통해서 동작되는 걸 확인하면서 이름 변경을 해보면서 어떤 이름들이 변경되는지 확인하였다.

그래서 좀 더 이해가 되도록 이름을 변경했고, 색상으로 표시를 했다.

다른 블로그(http://notull.tistory.com/entry/C-%ED%8F%BC%EA%B0%84-%EA%B0%92%EC%A0%84%EB%8B%AC-Event%EB%B0%9C%EC%83%9D)에도 예제 비슷하게 되어 있는데 설명은 없다.



목적2 : 메인폼에서 자식폼으로 데이터를 전송하는 방법


=== 메인폼에서 설정하는 것들 ===
// 자식폼(Form2)를 띄우는 이벤트
private void pictureBoxOpen_Click(object sender, EventArgs e)
{
    foreach (Form openForm in Application.OpenForms)
    {
        if (openForm.Name == "Form2") //폼 중복 열기 방지
        {
            openForm.Activate();
            return;
        }
    }

    Form2 frm2 = new Form2();

    frm2.Owner = this;  // 이 한줄을 추가해준다

    // 자식폼이 가지고 있는 TextSendEvent 이벤트 처리기에 frm2_getTextEvent 이벤트 연결

    frm2.TextSendEvent += new Form2.Form2_EventHandler(frm2_getTextEvent);
    frm2.Show();  // 자식폼이 활성화된  상태에서 값을 전달받기 위해서
}

void frm2_getTextEvent(string text)
{
    // 값을 넘겨 받아서 실제 처리할 함수
    CurrentData = text; // Form2 에서 넘겨받는 값
}



=== 자식폼에서 설정하는 것들 =====
public delegate void Form2_EventHandler(string data); // string 을 반환값으로 같은 대리자를 선언
public event Form2_EventHandler TextSendEvent// 대리자 타입의 이벤트 처리기를 설정

// 클릭하여 실제 전달되는 값
TextSendEvent(dlgOpen.FileName.ToString()); // 스트링값을 메인폼에게 보내줌


// 메인폼의 이름이 Form1 이라고 한다면

Form1 f1 = (Form1)this.Owner;

한줄을 추가해주고 나서, 값을 뿌릴 곳에다가 뿌려준다.

MessageBox.Show(f1.textBox1.Text);

textBox1 의 속성 중에서 Modifies 를 public 으로 반드시 변경해야 한다.

넘겨줄 값이 labelSubtitle1.Text 라서 아래 화면처럼 속성을 변경해줬다.



Form2 를 Load 하면서 메인폼의 값을 전달하는게 맞을거 같아서 Load 이벤트에 내용을 추가했다.

private void Form2_Load(object sender, EventArgs e)
{
    MainForm f1 = (MainForm)this.Owner;
    SearchBox.Text = System.IO.Path.GetFileNameWithoutExtension(f1.labelSubtitle1.Text);
    // Modifiers 를 public 으로 설정해줘야 된다.
}


블로그 이미지

Link2Me

,