在Form窗體中,this的應用
背景:
在BHHT_Bill界麵中點擊某個按鈕時,彈出BHZX界麵,並在BHZX界麵中輸入值,然後將BHZX界麵中輸入的值傳遞回BHHT_Bill界麵。
在BHHT_Bill界麵中:
屬性: public string vsBZ = string.Empty;//用來接收彈出界麵修改的值 某函數AA中的代碼: BHGL.BHHT.BHZX bhzx = new BHGL.BHHT.BHZX(); bhzx.ShowDialog(); MessageBox.Show("某某操作成功!");
在BHZX界麵中:
某函數BB中的代碼: BHHT_Bill bill = new BHHT_Bill(); bill.vsBZ = this.txtBZ.Text;//備注 this.Close();
在代碼跟蹤的時候,打開BHZX界麵並輸入值後,bill.vsBZ中是有值的,但當執行到this.Close()後,返回到BHHT_Bill界麵中時,函數不會執行MessageBox.Show("某某操作成功!"),而會跳轉至聲明公共變量屬性的地方,開始執行,也就是會再次執行public string vsBZ = string.Empty,執行完變量屬性後,才會到達MessageBox.Show("某某操作成功!")的語句,從而BHZX界麵傳值回BHHT_Bill界麵失敗!
那麼傳值失敗的原因是什麼呢?
原因在於:BHHT_Bill bill = new BHHT_Bill();這句話,因為這是新建了一個BHHT_Bill的實例,從而需要獲取這個類的屬性,也就是需要執行BHHT_Bill類中變量屬性部分的代碼。
那麼如何實現傳值呢?
在BHHT_Bill界麵中:
public string vsBZ = string.Empty;//用來接收彈出界麵修改的值 某函數AA中的代碼: BHGL.BHHT.BHZX bhzx = new BHGL.BHHT.BHZX(); bhzx.bill = this;//傳遞窗體自身,而不是新的窗體 bhzx.ShowDialog();
在BHZX界麵中:
變量屬性: public BHHT_Bill bill; 某函數BB中的代碼: bill.vsBZ = this.txtBZ.Text;//備注 this.Close();
小注:
通過傳遞窗體自身,而不是新的窗體,可以實現ShowDialog()界麵之間的傳值(循環調用)。
最佳實踐:
由this(即循環調用)來實現這種功能,其實可以通過一種更為簡單、易懂的方式來實現。
代碼如下:
在BHHT_Bill界麵中:
BHGL.BHHT.BHZX bhzx = new BHGL.BHHT.BHZX(); bhzx.ShowDialog(); string vsTxtBZ = bhzx.psBZ; bhzx = null;//注意清空
在BHZX界麵中:
變量屬性: public string psBZ = string.Empty; 某函數中的代碼: psBZ = this.txtBZ.Text;
最後更新:2017-04-03 20:19:20