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

FormCreate的問題

答題得分者是:h@visli
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-04-23 17:06:57 IP:59.125.xxx.xxx 未訂閱
請問有辦法解決在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-04-23 17:51:18 IP:218.18.xxx.xxx 未訂閱
可以的。

如:

[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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-04-23 18:35:48 IP:59.125.xxx.xxx 未訂閱

===================引 用 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]
------
-謝謝大大熱心的回覆!謝謝!
編輯記錄
l90425 重新編輯於 2008-04-23 18:40:12, 註解 無‧
l90425 重新編輯於 2008-04-23 21:03:14, 註解 無‧
l90425 重新編輯於 2008-04-23 21:05:53, 註解 無‧
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-04-23 22:53:42 IP:116.76.xxx.xxx 未訂閱
请把你的错误信息贴出来吧。
另外,你的Form1是否已经创建了呢?
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-04-23 23:26:10 IP:59.125.xxx.xxx 未訂閱

===================引 用 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-04-24 10:04:05 IP:218.18.xxx.xxx 未訂閱
没注意你的代码了,改成下面就可以了:

void __fastcall TForm3::FormCreate(TObject *Sender)
{
Button1Click(0);
}
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-04-24 11:57:55 IP:59.125.xxx.xxx 未訂閱

===================引 用 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-04-24 12:01:18 IP:218.18.xxx.xxx 未訂閱
你还是做个简单 的demo程序传上来吧,要不搞不清你哪里出错了。
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-04-24 13:35:04 IP:59.125.xxx.xxx 未訂閱

===================引 用 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-04-24 14:25:03 IP:218.18.xxx.xxx 未訂閱
跟据你描述的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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-04-24 16:28:42 IP:59.125.xxx.xxx 未訂閱
實在太謝謝大大的指導了
我知道怎麼做了
測試成功了-謝謝大大
------
-謝謝大大熱心的回覆!謝謝!
系統時間:2024-04-25 19:13:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!