2013-05-14 103 views
0

我有主表單和FORM 2(這是一種模態表單)。當退出時,Form2值返回0

當我輸入FORM 2時,會出現一個組合框,所選值將存儲在一個類中。從那裏,它工作正常,因爲messagebox確認存儲的值。

但是,當我退出FORM 2和回主要形式中的文本框以顯示該值,該值現在返回0

FORM 2:

private void btnOK_BS__Spec_Click(object sender, EventArgs e) 
{ 
    BSIT bsit = new BSIT(); 
    string spec = cboIT_Spec.Text; 

    do 
    { 
     if (spec == "Animation and Game Development" || spec == "Digital Arts") 
     { 
      bsit.setSpec(spec); 
      MessageBox.Show("You chose " + bsit.getSpec() + ".", "Specialization", 
      MessageBoxButtons.OK, MessageBoxIcon.Information);  
     } 
     else 
     { 
      MessageBox.Show("Please select your Specialization."); 
     } 
    } 
    while (bsit.getSpec() == ""); 
} 

CLASS

public class BSIT : Student 
{ 
    public BSIT() 
    { 
     spec = ""; 
    } 

    private string spec; 

    public void setSpec(string spec) 
    { 
     if (spec == "Animation and Game Development" || spec == "Digital Arts") 
     { 
      this.spec = spec; 
     } 
    } 

    public string getSpec() 
    { 
     return spec; 
    } 
} 

主要形式(顯示規格值)

private void txbxSpec_Input_TextChanged(object sender, EventArgs e) 
{ 
    BSIT bsit = new BSIT(); 

    if (!(bsit.getSpec() == "")) 
    { 
     txbxSpec_Input.Text = bsit.getSpec(); 
    } 
} 

回答

4

你有兩個獨立的BSIT類實例。您需要將第一個實例傳遞給FORM 2的實例或使BSIT類爲靜態。

至少我認爲這是由於我在您發佈的代碼中可以看到的原因。我沒有看到你在哪裏實例化包含你的事件的表單。

你的「新」在btnOK_BS__Spec_Click活動荷蘭國際集團起來BSIT一個實例和值保存到它,但它一旦超出範圍的情況下結束,因此您失去自己的價值。然後,您試圖從BSIT的第一個實例中獲取用戶的價值。

0

您在主要形式BSIT,然後把它傳遞到窗體2於是兩個形式訪問sinle實例,財產以後這樣你應該發送初始化新instace:

這裏我定義了一個構造函數形式的Form2給BSIT實例表格形式主要

Public class Form2 
{ 
    BSIT result; 
    public Form2(BSIT bsit) 
    { 
    result = bist; 
    } 

    ... 
} 

現在當你在初始化MainForm的FORM2你應該有財產以後這樣的:

BIST resultFromForm2 = new BIST(); 
Form2 frm = new Form2(resultFromForm2); 
frm.showDialog(); 

,你應該有somthin摹像你點擊按鈕的事件處理程序THID: (你可以看到我改變「結果」,我們之前設置它的構造函數)

private void btnOK_BS__Spec_Click(object sender, EventArgs e) 
{ 

    string spec = cboIT_Spec.Text; 

    do 
    { 
     if (spec == "Animation and Game Development" || spec == "Digital Arts") 
     { 
      result.setSpec(spec); 
      MessageBox.Show("You chose " + result.getSpec() + ".", "Specialization", 
      MessageBoxButtons.OK, MessageBoxIcon.Information);  
     } 
     else 
     { 
      MessageBox.Show("Please select your Specialization."); 
     } 
    } 
    while (result.getSpec() == ""); 
}