背景:
在bhht_bill界面中點選某個按鈕時,彈出bhzx界面,并在bhzx界面中輸入值,然後将bhzx界面中輸入的值傳遞回bhht_bill界面。
在bhht_bill界面中:
在bhzx界面中:
在代碼跟蹤的時候,打開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類中變量屬性部分的代碼。
那麼如何實作傳值呢?
小注:
通過傳遞窗體自身,而不是新的窗體,可以實作showdialog()界面之間的傳值(循環調用)。
最佳實踐:
由this(即循環調用)來實作這種功能,其實可以通過一種更為簡單、易懂的方式來實作。
代碼如下: