2012-10-19 3 views
1

Windows Forms 응용 프로그램을 사용해 본 지 꽤 오래되었습니다. 사용자가 추가 데이터를 요청하기 위해 두 번째 양식을 열어야하는 경우 기본 양식의 확인란이 있고 특정 조건에 따라 두 번째 양식을 기본 양식으로 전달 (또는 가져 오기)해야하는 경우 확인란을 선택하거나 선택을 취소 할 수 있는지 여부를 알 수 있습니다.양식 간 Control.Checked 상태 전달을 처리하는 가장 좋은 방법입니다.

내가 기억할 수있는 것으로부터, 패스와 같은 것을 사용할 수 있습니다. ref. 아니면 이것을 수행하는 더 좋은 방법이 있습니까?

+1

나는 당신의 상황을 잘 이해하고 있지는 않지만, 심판을 통과하는 것이 해결책이라고 생각하지 않습니다. 먼저 어떤 양식이 열렸습니까? 한 형태가 다른 형태의 부모인가? 언제 값을 전달하고 싶습니까? – Otiel

+1

[그] (http://stackoverflow.com/search?q= [c % 23] + 패스 + 데이터 + 양식 사이)를 확인 했습니까? – Otiel

+0

Form.ShowDialog 메서드를 사용하는 것이 좋습니다 (http://msdn.microsoft.com/en-us/library/c7ykbedk%28v=vs.100%29.aspx). – RobH

답변

1

이렇게하는 한 가지 방법은 이벤트를 사용하는 것입니다.

자녀 양식에서 특정 사용자 상호 작용시 발생할 이벤트를 선언하고 기본 양식의이 이벤트에 "가입"하십시오. 인스턴스화하고 당신에게 자식 폼을 호출 할 때

,이 같이 할 것 : 당신의 자식 폼에서

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 frm = new Form2(); 
    frm.MyEvent += frm_MyEvent; 
    frm.ShowDialog(); 
    frm.MyEvent -= frm_MyEvent; 
} 

private void frm_MyEvent(object sender, EventArgs e) 
{ 
    textBox1.Text = "whatever"; //just for demo purposes 
} 

을, 당신은 이벤트를 선언하고 인상 :

public event EventHandler MyEvent; 

private void button1_Click(object sender, EventArgs e) 
{ 
    if (MyEvent!= null) 
     MyEvent(this, EventArgs.Empty); 
} 

희망이 도움이

+0

흥미로운 접근 방식. 감사! – Arrow

+1

@James : 예에서는 EventArgs.Empty를 사용했지만, 값이있는 "실제"EventArg를 사용하면 기본 폼으로 다시 전달할 수 있습니다. –

+0

이 모든 작업을 수행 할 시점은 무엇입니까? 이벤트의 요점은 (가입자의 관점에서) 미래의 불확정 지점에서 일부 코드가 실행되도록 허용하는 것이지만 구독자는 코드를 실행해야하는 시점을 알고 있습니다. 이것은 본질적으로 * 비 * 모달 대화 상자를 사용하는 경우 따라야 할 모델이지만 모달 대화 상자는 불필요한 노력입니다. – Servy

3

자식 폼을 대화 상자로 표시하고 양식을 닫을 때까지 부모 폼이 필요하지 않으므로 공용 getter 및 개인 설정자가있는 속성을 자식 폼에 추가하기 만하면됩니다 , 적절할 때마다 자식 폼의 값을 설정 한 다음 ShowDialog 호출 후 주 폼에서 값을 읽습니다.

+0

대단히 감사합니다. – Arrow

관련 문제