全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:779
推到 Plurk!
推到 Facebook!

動態 Form 資料間傳輸

尚未結案
CharlesWen
一般會員


發表:4
回覆:7
積分:2
註冊:2004-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-08 18:19:08 IP:211.72.xxx.xxx 未訂閱
各位大大 安安 小弟是BCB的新手 最近在寫程式時有需要用到動態Form 但是在執行到Form2時都會遇到"EAccess Violation"的問題 之前有爬過文,但未有相關的資訊 請各位大大幫幫忙吧 程式如下: Form1.cpp #include "Form1.h" #include "Form2.h" void __fastcall TForm1::FormCreate(TObject *Sender) { Form1 -> Label1 -> Caption = "ABC"; } void __fastcall TForm1::Button5Click(TObject *Sender) { Form1 -> Visible = false; TForm2 *Form2; Form2 = new TForm2(Application); Form2 -> Show(); } ============================================================= Form2.cpp #include "Form2.h" void __fastcall TForm2::Button1Click(TObject *Sender) { Form2 -> Label1 -> Caption = Form1 -> Label1 -> Caption; //執行到這就會有問題,是不知道到底可不可以這麼用@@! Form2 -> Button1 -> Enabled = false; //如果上一行mask掉的話,執行到這一行一樣會有問題 } 但是下面的離開Form2視窗部分沒問題 void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } //--------------------------------------------------------------------------- void __fastcall TForm2::Button2Click(TObject *Sender) { Form1 -> Visible = true; Close(); }
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-08 18:43:47 IP:203.73.xxx.xxx 未訂閱
引言: 各位大大 安安 小弟是BCB的新手 最近在寫程式時有需要用到動態Form 但是在執行到Form2時都會遇到"EAccess Violation"的問題 之前有爬過文,但未有相關的資訊 請各位大大幫幫忙吧 程式如下: Form1.cpp #include "Form1.h" #include "Form2.h" void __fastcall TForm1::FormCreate(TObject *Sender) { Form1 -> Label1 -> Caption = "ABC"; } void __fastcall TForm1::Button5Click(TObject *Sender) { Form1 -> Visible = false; TForm2 *Form2; Form2 = new TForm2(Application); Form2 -> Show(); } ============================================================= Form2.cpp #include "Form2.h" void __fastcall TForm2::Button1Click(TObject *Sender) { Form2 -> Label1 -> Caption = Form1 -> Label1 -> Caption; //執行到這就會有問題,是不知道到底可不可以這麼用@@! Form2 -> Button1 -> Enabled = false; //如果上一行mask掉的話,執行到這一行一樣會有問題 } 但是下面的離開Form2視窗部分沒問題 void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } //--------------------------------------------------------------------------- void __fastcall TForm2::Button2Click(TObject *Sender) { Form1 -> Visible = true; Close(); }
CharlesWen你好: 依你的 class="code"> void __fastcall TForm2::Button1Click(TObject *Sender) { this->Label1->Caption=Form1->Label1->Caption; this->Button1->Enabled=false; } 另外要彼此include .h檔!你的.h是Form1.h 、 Form2.h ??
CharlesWen
一般會員


發表:4
回覆:7
積分:2
註冊:2004-11-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-08 19:42:01 IP:220.136.xxx.xxx 未訂閱
是的 那再請教一下 void __fastcall TForm2::Button1Click(TObject *Sender) { this->Label1->Caption=Form1->Label1->Caption; this->Button1->Enabled=false; } 其中的this 是不是要將 void __fastcall TForm1::Button5Click(TObject *Sender) { Form1 -> Visible = false; TForm2 *Form2; Form2 = new TForm2(Application); Form2 -> Show(); } 中(Application)改成(this)呢? 另外,您所謂的"彼此include h檔" 是不是要把Form1.cpp及Form2.cpp都加上 #include Form1.h #include Form2.h 呢?? 先謝謝您的回答
CharlesWen
一般會員


發表:4
回覆:7
積分:2
註冊:2004-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-08 19:53:32 IP:220.136.xxx.xxx 未訂閱
對了 還有請教一下m8815010大大 之前爬文時看到很多人都用this這個變數當新開Form的參數 是不是一定要用"this"呢?? 還是都無限制??
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-08 20:37:51 IP:203.73.xxx.xxx 未訂閱
引言: 對了 還有請教一下m8815010大大 之前爬文時看到很多人都用this這個變數當新開Form的參數 是不是一定要用"this"呢?? 還是都無限制?? < face="Verdana, Arial, Helvetica"> CharlesWen你好: 嗯,我講的不太好,應該是說因為你有這一行的關係,所有限定 class="code">TForm2 *Form2; 也就是因為你新宣告一個TForm2的物件這種寫法,這個Form2不等於原來Form.cpp中程式自動幫你宣告的那個Form2,也就是在Form2.cpp中如果這樣寫: Form2 -> Label1 -> Caption = Form1 -> Label1 -> Caption; compile時會把Form2當成原Form2.cpp中自已宣告的那一個,而不是Form1.cpp中你新宣告的那個! 而用this則表示現在處理中的這個Form2,也就是你宣告的這個! 另外.h要include,要不然Form2會看不到Form1的! 最後Application和this的意義不同,但沒什麼差別的! this和Form的使用相當不易區分差別,但像上例就是一個最好的區別,一般沒差時就隨便用了! 說的很亂!
CharlesWen
一般會員


發表:4
回覆:7
積分:2
註冊:2004-11-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-08 21:18:16 IP:220.136.xxx.xxx 未訂閱
m8815010大大    那是不是我在Form1.cpp中的 TForm2 *Form2; Form2 = new TForm2(Application);    (Application)要改成(this)    並且Form2只是宣告一個新的Form    而實際在Form2.cpp中 所有的敘述開頭的Form2都要改成this    這樣才對勒??    不好意思,新手問題多喔!!
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-08 21:42:31 IP:203.73.xxx.xxx 未訂閱
引言: m8815010大大 那是不是我在Form1.cpp中的 TForm2 *Form2; Form2 = new TForm2(Application); (Application)要改成(this) 這邊改不改沒差,這裏的this是指Form1哦 並且Form2只是宣告一個新的Form Form2中本來就只宣告一個Form2而已,是程式自動宣告的,在Form2.cpp中的: ~~ //--------------------------------------------------------------------- #pragma resource "*.dfm" TForm2 *Form2; <--- ~~ 而實際在Form2.cpp中 所有的敘述開頭的Form2都要改成this 這樣才對勒?? 是的,但不是絕對的,是因為你這樣寫法的關係: TForm2 *Form2; Form2 = new TForm2(Application); 不好意思,新手問題多喔!! < face="Verdana, Arial, Helvetica">
CharlesWen
一般會員


發表:4
回覆:7
積分:2
註冊:2004-11-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-08 21:57:25 IP:220.136.xxx.xxx 未訂閱
嗯 OK 那我去試試看 謝謝你喔 m8815010大大
系統時間:2024-04-28 7:50:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!