FormCreate的問題 |
答題得分者是:h@visli
|
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
請問有辦法解決在FormCreate裡面使用Button1Click(Sender)會發生錯誤的問題嗎
就像以下的程式嗎-謝謝你的回答 [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" #include "Unit3.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm3 *Form3; //--------------------------------------------------------------------------- __fastcall TForm3::TForm3(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm3::Button1Click(TObject *Sender) { Form1->Show(); } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void __fastcall TForm3::FormCreate(TObject *Sender) { Button1Click(Sender); } //--------------------------------------------------------------------------- [/code]
------
-謝謝大大熱心的回覆!謝謝! 編輯記錄
l90425 重新編輯於 2008-04-23 17:07:41, 註解 無‧
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
可以的。
如: [code delphi] type TForm3 = class(TForm) Button1: TButton; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; implementation {$R *.dfm} procedure TForm3.FormCreate(Sender: TObject); begin Button1Click(nil); end; procedure TForm3.Button1Click(Sender: TObject); begin edit1.Text := DateTimeToStr(Now()); end; [/code]
------
------------------------ 博采眾家之長,奉獻綿薄之力 ------------------------ |
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
===================引 用 h@visli 文 章=================== 可以的。 如: [code delphi] type TForm3 = class(TForm) Button1: TButton; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; implementation {$R *.dfm} procedure TForm3.FormCreate(Sender: TObject); begin Button1Click(nil); end; procedure TForm3.Button1Click(Sender: TObject); begin edit1.Text := DateTimeToStr(Now()); end; [/code] 實在太不好意思了,能否請大大再講詳細一點 因為小弟實在是新手 請,教我要如何改-謝謝大大的說明 以下的程式還是無法執行會造成記憶體錯誤 [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit2.h" #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm3 *Form3; //--------------------------------------------------------------------------- __fastcall TForm3::TForm3(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm3::Button1Click(TObject *Sender) { Form1->Show(); } //--------------------------------------------------------------------------- void __fastcall TForm3::FormCreate(TObject *Sender) { Button1Click(nil); } //--------------------------------------------------------------------------- [/code]
------
-謝謝大大熱心的回覆!謝謝! |
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
|
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
===================引 用 h@visli 文 章=================== 请把你的错误信息贴出来吧。 另外,你的Form1是否已经创建了呢? 有創建Form1 [C Error] Unit3.cpp(31): E2451 Undefined symbol 'nil' 同時我也試了Button1Click(NULL); Button1Click(Sender);也都不行 能解決嗎---謝謝你的用心回答 Form3 [code cpp] #include #pragma hdrstop #include "Unit1.h" #include "Unit3.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm3 *Form3; //--------------------------------------------------------------------------- __fastcall TForm3::TForm3(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm3::Button1Click(TObject *Sender) { Form1->Show(); } //--------------------------------------------------------------------------- void __fastcall TForm3::FormCreate(TObject *Sender) { Button1Click(nil); } //--------------------------------------------------------------------------- [/code] Form1 [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit3.h" #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Form3->Show(); Close(); } //--------------------------------------------------------------------------- [/code]
------
-謝謝大大熱心的回覆!謝謝! |
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
|
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
===================引 用 h@visli 文 章=================== 没注意你的代码了,改成下面就可以了: void __fastcall TForm3::FormCreate(TObject *Sender) { Button1Click(0); } 他會出現Project Project1.exe raised Class ........'Access violation at address 400EE72E in module vcl60.bpl'....的錯誤提示 請大大再幫幫忙看看是什麼原因-謝謝大大幫忙
------
-謝謝大大熱心的回覆!謝謝! |
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
|
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
===================引 用 h@visli 文 章=================== 你还是做个简单 的demo程序传上来吧,要不搞不清你哪里出错了。 恩好的-謝謝大大 主Form2 [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm2 *Form2; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm2::Button1Click(TObject *Sender) { Form1->Show(); } //--------------------------------------------------------------------------- void __fastcall TForm2::FormCreate(TObject *Sender) { Button1Click(0); } //--------------------------------------------------------------------------- [/code] 次Form1 [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit2.h" #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Form2->Show(); Close(); } //--------------------------------------------------------------------------- [/code]
------
-謝謝大大熱心的回覆!謝謝!
編輯記錄
l90425 重新編輯於 2008-04-24 13:37:44, 註解 無‧
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
跟据你描述的Form2是主窗体,而Form1是次窗体,请对照一下你的工程文件源代码(IDE菜单Project--View Source),是否如下面一样Form2在Form1之前创建:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm2), &Form2); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } //.... 那么由于在执行 Application->CreateForm(__classid(TForm2), &Form2); 这句时,会用到Form1,而Form1这时并没有创建,所以弹出内存错误。 即在执行 void __fastcall TForm2::Button1Click(TObject *Sender) { Form1->Show(); } 时,Form1还不存在。所以你的代码是有问题的,你自己在每个方法中设置断点,单步运行就会发现。 另外,下次遇到这类问题时,你可以把你的所有文件压缩后上传到这里,供大家分析。
------
------------------------ 博采眾家之長,奉獻綿薄之力 ------------------------ |
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |