多個動態視窗的值回傳 |
答題得分者是:aftcast
|
ken0127
一般會員 發表:3 回覆:9 積分:7 註冊:2009-09-23 發送簡訊給我 |
大家好
我現在寫了一個程式 有三個Form,分別是Form1、Form2、Form3 Form2是由Form1動態產生,Form3則是由Form2動態產生 我現在將值從Form2寫回Form1都沒問題 我是直接用Form1->.....這種方法寫的 但現在遇到問題是從Form3將資料寫回Form2時 則是在執行程式時會出現Access violation at address 0040396B in module 'Project1.exe'.Read of address 000002F0 我也有將Form3 include Form2的.h檔 想問大家這樣的問題該怎麼解決 站上有小小爬過文…也許是不知道該怎麼打關鍵字 剛學BCB,關念還不是很懂 請站上各位大大多多指教 |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
都沒人回…實在是因為1/你講的有一點點的不清楚2/解答有點難說的很清楚…幾天前我就看了,但有點…懶…
原因應該是出在: 「動態產生」造成的。 因為TForm1(注意我特別強調的是有T,所以是類別)是自動被建的,所以Form1這個預設的變數就被賦與一個物件。當你在Form2使用Form1-> 時,一切正常。因為Form1是真的有被創出來的實體。然而Form2呢? 有被賦與物件嗎? 很難說,不知你程式是怎寫的…因為它是動態產生的。你有可能如下而產生 TForm2 *Form2= new TForm2(this); // a種方式 或者你把form2的unit include進來然後 Form2 = new TForm2(this); //這樣的話Form2就是真的有物件,看清楚最前面是Form2 = 而不是 TForm2 *Form2 = (意義很不同) //b種方式 如果你用的是a種方式,那就會出現你說的錯誤! 因為…你new出來的Form2不是全域變數(因為new的時候是處於某方法裡)。那為何b種可以? 因為TForm2.h這個檔有宣告Form2是全域的變數。 所有的問題都根源於 你要了解什麼是 全域變數 ,什麼是區域變數,又當二個地方都有名稱一樣的變數時,會發生什麼事… ===================引 用 ken0127 文 章=================== 大家好 我現在寫了一個程式 有三個Form,分別是Form1、Form2、Form3 Form2是由Form1動態產生,Form3則是由Form2動態產生 我現在將值從Form2寫回Form1都沒問題 我是直接用Form1->.....這種方法寫的 但現在遇到問題是從Form3將資料寫回Form2時 則是在執行程式時會出現Access violation at address 0040396B in module 'Project1.exe'.Read of address 000002F0 我也有將Form3 include Form2的.h檔 想問大家這樣的問題該怎麼解決 站上有小小爬過文…也許是不知道該怎麼打關鍵字 剛學BCB,關念還不是很懂 請站上各位大大多多指教
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
ken0127
一般會員 發表:3 回覆:9 積分:7 註冊:2009-09-23 發送簡訊給我 |
感謝aftcast大大的回覆,解答了我的疑惑
原來是因為我沒有將form2宣告成全域變數的關係 我宣告的就是您說的第一種方法 但對於new的用法及關念其實在下不是很懂 可否請大大簡單的說明一下 我有查關鍵字「new」但找不到東西= = bcb的書上似乎沒有寫到這邊... ===================引 用 aftcast 文 章=================== 都沒人回…實在是因為1/你講的有一點點的不清楚2/解答有點難說的很清楚…幾天前我就看了,但有點…懶… 原因應該是出在:? 「動態產生」造成的。 因為TForm1(注意我特別強調的是有T,所以是類別)是自動被建的,所以Form1這個預設的變數就被賦與一個物件。當你在Form2使用Form1-> 時,一切正常。因為Form1是真的有被創出來的實體。然而Form2呢? 有被賦與物件嗎?? 很難說,不知你程式是怎寫的…因為它是動態產生的。你有可能如下而產生 TForm2 *Form2= new TForm2(this);? // a種方式 或者你把form2的unit? include進來然後 Form2 = new TForm2(this);? //這樣的話Form2就是真的有物件,看清楚最前面是Form2 = 而不是 TForm2 *Form2 = (意義很不同)? //b種方式 如果你用的是a種方式,那就會出現你說的錯誤!? 因為…你new出來的Form2不是全域變數(因為new的時候是處於某方法裡)。那為何b種可以?? 因為TForm2.h這個檔有宣告Form2是全域的變數。 所有的問題都根源於? 你要了解什麼是 全域變數 ,什麼是區域變數,又當二個地方都有名稱一樣的變數時,會發生什麼事… ===================引 用 ken0127 文 章=================== 大家好 我現在寫了一個程式 有三個Form,分別是Form1、Form2、Form3 Form2是由Form1動態產生,Form3則是由Form2動態產生 我現在將值從Form2寫回Form1都沒問題 我是直接用Form1->.....這種方法寫的 但現在遇到問題是從Form3將資料寫回Form2時 則是在執行程式時會出現Access violation at address 0040396B in module 'Project1.exe'.Read of address 000002F0 我也有將Form3 include Form2的.h檔 想問大家這樣的問題該怎麼解決 站上有小小爬過文…也許是不知道該怎麼打關鍵字 剛學BCB,關念還不是很懂 請站上各位大大多多指教 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |