大家好,我是朱老師,前幾天輔導(dǎo)學(xué)員,學(xué)員 form1調(diào)用form2時(shí),值沒(méi)有刷新,帶不過(guò)去。
修改了form1的text控件里面的值,從20改到30,然后在調(diào)用顯示form2時(shí),form2的textbox控件的值還是原來(lái)的20,沒(méi)有顯示最新的數(shù)字30. 就是 Form1的文本框控件的30傳不到form2的textbox控件里。
軟件運(yùn)行效果如下:
代碼截圖如下:
Form1調(diào)用form2
Form2 里先通過(guò)new關(guān)鍵字實(shí)例化form1對(duì)象frm1,然后通過(guò)調(diào)用form1的屬性方法getvalue.()賦值給h變量。最后賦值給form2的文本框控件txttspririt的text屬性。
結(jié)果是txtSpirit控件的text屬性值還是20,沒(méi)有刷新成30.造成form1的文本框的值30一直傳不過(guò)去。
這個(gè)問(wèn)題是初學(xué)者很常見(jiàn)易犯的。就是我們常說(shuō)的設(shè)計(jì)模式中的單例模式問(wèn)題。解決方法有很多種,下面就介紹常用比較簡(jiǎn)單的如下三種解決方法。
第一種解決方法:在form1里面定義一個(gè)靜態(tài)變量static string fromTxtSpirit。然后form1在文本框輸入值后,給該靜態(tài)變量設(shè)置值。最后 Form2在窗體加載事件load中從靜態(tài)變量fromTxtSpirit中獲取,這樣的話,可以保證獲取到的值是 最新的值。因?yàn)殪o態(tài)變量是所有對(duì)象共有變量。所有實(shí)例化的窗體都可以共享該變量。
第二種解決方法:將form1窗體句柄 傳給form2. Form窗體默認(rèn)是只有無(wú)參的構(gòu)造函數(shù)。當(dāng)然form2需要增加帶參數(shù)的構(gòu)造函數(shù)。具體實(shí)現(xiàn)方法是首先在form2中定義一個(gè)帶參數(shù)的構(gòu)造函數(shù),參數(shù)類型是Form類型。然后在form1中調(diào)用顯示form2時(shí), 通過(guò)該有參數(shù)構(gòu)造方法實(shí)例化form2, 參數(shù)傳值就是form1對(duì)象的實(shí)例。這樣在form2類中,就可以接收到父窗體對(duì)象的實(shí)例。該實(shí)例的所有公有成員在form2對(duì)象中都可以被訪問(wèn)到。當(dāng)然可能默認(rèn)對(duì)象控件的訪問(wèn)范圍都是私有的。這時(shí)就在需要修改下父窗體的控件的訪問(wèn)屬性,改成public即可。
第三種解決方法:也是我們最常用的方法,定義屬性方法。在form2定義個(gè)屬性,實(shí)例化form2時(shí),實(shí)時(shí)設(shè)置該屬性值。這個(gè)屬性不需要是靜態(tài)類型。因?yàn)槊看螌?shí)例化的對(duì)象不一樣,所以屬性也會(huì)跟著對(duì)象變化。前提就是在實(shí)例化form2時(shí),記得給屬性賦值即可。代碼截圖如下:
當(dāng)然,除了以上三種方法外,還有其他更優(yōu)雅或者安全的方法機(jī)制,比如委托等等。這里就不一一舉例了。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.