閱讀164 返回首頁    go 阿裏雲 go 技術社區[雲棲]


在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

  上一篇:go Config文件詳解
  下一篇:go 巴氏刷牙法