2013-05-24 3 views
1

winforms에서 다른 양식으로 값을 전달하려고합니다.하나의 양식에서 다른 양식으로 간단한 값 전달

내 기본 양식에 btnAddNewRecord 및 dataOptions 콤보 상자가 있습니다.

사용자는 먼저 combobox (dataOptions)에서 선택하고 btnAddNewRecord를 클릭해야합니다. 내가 새로운 형태 dataoptions 콤보 상자에서 값을 선택이 사용자를 전달하려는, 그래서이

MainForm 같은 시도

private void btnAddNewRecord_Click(object sender, EventArgs e) 
{ 
    var formAddRecord = new FormNewRecord(); 
    formAddRecord.ShowDialog(); 
} 
private void Form1_Load() 
{ populating combobox...} 
private void dataOptions_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    IMyCustomData data = (IMyCustomData)dataOptions.SelectedItem; 
    var formAddRecord = new FormNewRecord(); 
    formAddRecord.SelectedDataOptions = data.ToString();   
} 

FormNewRecord.cs

public string SelectedDataOptions {get; set;} 
private void FormNewRecord_Load(,,,,,) 
{ 
    txtSelectedDataOptions.Text = SelectedDataOptions; 
} 

빌드에 아무런 오류 만에 디버깅 txtSelectedDataOptions은 전달 된 값으로 채워지지 않습니다. 내가 여기서 뭐하고 있는거야?

감사

답변

3
당신은 FormNewRecord의 두 개의 서로 다른 인스턴스를 만드는

. formAddRecord을 비공개 필드로 만들고 버튼 클릭시 표시하십시오.

FormNewRecord formAddRecord = new FormNewRecord(); 

private void btnAddNewRecord_Click(object sender, EventArgs e) 
{ 
    formAddRecord.ShowDialog(); 
} 

private void dataOptions_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    IMyCustomData data = (IMyCustomData)dataOptions.SelectedItem; 
    formAddRecord.SelectedDataOptions = data.ToString(); 
} 
3

음, formAddRecord는 각 메소드에서 다시 선언 된 var가 아닌 클래스의 비공개 필드 여야합니다!

(방법 btnAddNewRecord_Click에는 다른 인스턴스를 만드는 방법에 따라 dataOptions_SelectedIndexChanged 메서드에 선언 된 변수에 대한 아이디어가 없습니다.)

그래서

나는 또 다른 형태의 새로운 양식 인스턴스가 좋은 방법, 당신이 부모 폼에서 public으로 전달하려는 데이터를 설정 할 수있는 더 좋은 방법, 생각하지 않습니다
private FormNewRecord formNewRecord_ = new FormNewRecord(); 


private void btnAddNewRecord_Click(object sender, EventArgs e) 
{ 
    formNewRecord_ .ShowDialog(); 
} 
private void Form1_Load() 
{ populating combobox...} 
private void dataOptions_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    IMyCustomData data = (IMyCustomData)dataOptions.SelectedItem; 
    formNewRecord_.SelectedDataOptions = data.ToString();   
} 
0

때 하위 양식을 표시하고 상위 양식을 하위 소유자로 설정하면 하위 양식의 데이터를 가져와 사용할 수 있습니다.
기본 양식 :


    public string passData = ""; 
    private void btnAddNewRecord_Click(object sender, EventArgs e) 
    { 
     var formAddRecord = new FormNewRecord(); 
     formAddRecord.ShowDialog(this); //important 
    } 
    private void Form1_Load() 
    { populating combobox...} 
    private void dataOptions_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     IMyCustomData data = (IMyCustomData)dataOptions.SelectedItem; 
     passData = data.ToString(); //store the selected value to passData 
    } 

2.get가 자녀의 소유자로부터 데이터를 전달 :

FormNewRecord

  1. 이 같은 부모 형태의 공공 재산으로 데이터를 설정합니다. CS

    private void FormNewRecord_Load(,,,,,) 
    { 
        if(this.Owner != null) 
        { 
         MainForm mf = (MainForm)this.Owner; 
         txtSelectedDataOptions.Text = mf.passData; 
        } 
    } 
    
관련 문제