2012-06-01 2 views
0

부모 폼과 대화 상자가 있습니다. 나는 무엇을 여기에 대화부모로부터 대화 상대까지의 데이터

에 부모로부터 정보를 전달하는 데있어 필요

(어린이/대화) 형태로, 내가 intialitzed 한

public partial class DlgGraphOptions : Form 
{ 
    public GraphOpts_t m_SerOpts = new GraphOpts_t(); 
} 

private void InitSettings(int idxSeries) 
{ 
    m_nMaxPts = m_SerOpts.GetMaxPts(idxSeries); 
} 

그래서 내가 필요 DlgGraphOptions에서

private void Item_Click(object sender, EventArgs e) 
{ 
    DialogResult result = DialogResult.OK; 
    DlgGraphOptions _frmDlgGraphOptions = new DlgGraphOptions();    
    _frmDlgGraphOptions.m_SerOpts = theDGroup.m_SerOpts; 
    _frmDlgGraphOptions.ShowDialog(this); 
    if (result == DialogResult.OK) 
    { 
    // Save the revised options to the Data Group 
    theDGroup.m_SerOpts = _frmDlgGraphOptions.m_SerOpts; 
    } 

부모로부터 대화 상자로 theDGroup.m_SerOpts를 전달하면 완료됩니다.

부모의 경우. 지금은 어린이 :

public GraphOpts_t m_SerOpts = new GraphOpts_t; 

이것은 잘못된 것처럼 보입니다. 나는 그것을 다시 초기화하고 싶지 않다.

+0

중복 : http://stackoverflow.com/questions/280579/how-do-i-pass- a-child-back-to-the-parent-form – Tremmors

답변

0

아이 클래스는 아마 속성으로 m_SerOpts이 있어야합니다

귀하의 클릭 이벤트가 아마 다음과 같이 정리 될 수있다
public partial class DlgGraphOptions : Form 
{ 
    public GraphOpts_t m_SerOpts { get; set; } 
} 

:

private void Item_Click(object sender, EventArgs e) 
{ 
    using (DlgGraphOptions _frmDlgGraphOptions = new DlgGraphOptions()) { 
    _frmDlgGraphOptions.m_SerOpts = theDGroup.m_SerOpts; 
    if (_frmDlgGraphOptions.ShowDialog(this) == DialogResult.OK) 
    { 
     // Save the revised options to the Data Group 
     theDGroup.m_SerOpts = _frmDlgGraphOptions.m_SerOpts; 
    } 
    } 
} 

어디 DlgGraphOptions 형태로, 당신은 필요 OK 또는 Save 버튼 이벤트에서 양식의 DialogResult 속성을 설정하십시오.

public partial class DlgGraphOptions : Form 
{ 
    public GraphOpts_t m_SerOpts { get; } 

    public DlgGraphOptions(GraphOpts_t serOpts) { 
    InitializeComponents(); 
    m_SerOpts = serOpts; 
    } 
} 
+0

초기화하는 동안 필요합니다. 내가 생성자에 그것을 포함시킬 수 있다면 좋을 것입니다. – user575219

+0

@ user575219 잘 모르겠습니다. 객체는'theDGroup.m_SerOpts'에서 이미 초기화 된 것처럼 보입니다. 그게 문제라면 항상 null을 확인하고 초기화 할 수 있습니다. – LarsTech

1

난 당신이 이런 식으로 코드를 변경해야한다고 생각 :

당신은 또한 단지 m_SerOpts를 전달할 수

생성자를 통해 오브젝트 DlgGraphOptions에,

먼저 형태의 생성자를 변경 DlgGraphOptions

// Force the caller to pass a GraphOpts_t 
// Check if it is a valid instance or create one as new 
public partial class DlgGraphOptions(GraphOpts_t input) : Form 
{ 
    m_SerOpts = (input == null ? new GraphOpts_t() : input); 
} 

그런 다음 inter를 반환하는 getter 만 사용하여 공용 속성을 만듭니다. 최종 GraphOpts

public GraphOpts_t Options 
{ 
    get{ return m_SerOpts; } 
} 

는, 호출하는 형태로, uour 코드

// Pass the m_setOpts from theDGroup 
DlgGraphOptions _frmDlgGraphOptions = new DlgGraphOptions(theDGroup.m_SerOpts); 
if(DialogResult.OK == _frmDlgGraphOptions.ShowDialog(this)) 
{ 
    // Save the revised (or new) options to theDGroup 
    theDGroup.m_SerOpts = _frmDlgGraphOptions.Options; 
} 

이 방식은 초기 값 또는 null을 전달하기 위해 대화 상자의 사용자를 강제로 변경합니다. 그러나 InitSettings 초기화 된 값으로 작동하고 옵션 인스턴스를 두 번 초기화하지 않았습니다.
(사실 코드에서 큰 개선은 없지만 더 나은 방법이라고 생각합니다.)

관련 문제