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

動態edit free時會出現 error

答題得分者是:BOSS
chubby
一般會員


發表:43
回覆:65
積分:21
註冊:2003-05-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-21 11:17:03 IP:61.228.xxx.xxx 未訂閱
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } procedure Edit1Exit(Sender: TObject); public { Public declarations } end; var Form1: TForm1; edit:Tedit; // 動態 (在 PageControl 裡 TabSheet2 使用) implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Edit:=TEdit.Create(Self); Edit.Parent:=Self; Edit.Height:=29; Edit.Width:=50; Edit.Left:=280; Edit.MaxLength:=4; Edit.Top:=200; Edit.Font.Size:=16; Edit.SetFocus; Edit.OnExit:=Edit1Exit; end; procedure TForm1.Edit1Exit(Sender: TObject); begin showmessage('ok'); edit.Free; //是否我free有誤 ,如將 不執行free,就無問題,可是回 TabSheet1,看到動態 edit ??? end; edit.Free; 時會出現access violation at address 00403c58 in module "projexct.exe" read of address 00e0c000
BOSS
中階會員


發表:70
回覆:79
積分:64
註冊:2006-11-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-21 12:02:59 IP:202.154.xxx.xxx 未訂閱
hi chubby 改成freeandnil(edit)試試 你的edit若要出現在 PageControl 的 TabSheet2 裡 這裡應該改為Edit.Parent:=TabSheet2;
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-21 12:06:43 IP:61.222.xxx.xxx 未訂閱
hi,chubby: 我想你的問題應該出在Edit1Exit事件裡.在這裡,你的Edit給free了,那麼程式執行完Exit之後,要回到那裡?建議你應該在其他地方呼叫Edit.free
chubby
一般會員


發表:43
回覆:65
積分:21
註冊:2003-05-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-21 14:39:00 IP:61.228.xxx.xxx 未訂閱
hi change.jian 我想你的問題應該出在Edit1Exit事件裡.在這裡,你的Edit給free了,那麼程式執行完Exit之後,要回到那裡?建議你應該在其他地方呼叫Edit.free <> 在 PageControl -> PageControl1Change 或 TabSheet2 onexit 使用 free 多有問題 ? 因在 TabSheet2 -> button 才產生 動態tedit ,執行後該在那理free ? 或 <> 如何判斷 user 是否按button 產生動態Tedit, 如有在那事件中free比較洽當,不才,不會判斷動態Tedit是否已產生 freeandnil(edit) ->也是一樣 謝謝boss and change.jian 發表人 - chubby 於 2004/06/21 14:48:55
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-21 16:40:10 IP:61.222.xxx.xxx 未訂閱
我不曉得你要的功能是什麼,只知道你現在的程式需要動態產TEdit,然後有一個Edit1Exit的事件要指給TEdit.這樣我沒有辦法幫你找到解答.其實你現在只是沒辦法決定在何時應該去free你動態產生的TEdit而已.你可以試著說明一下你要寫出什麼樣功能的程式,或著TEdit是用來做什麼用的,這樣我或者可能幫你找到解決的方法.    當然,你可以在Form.OnDestory裡去把Edit釋放掉,一定沒問題.只是不曉得這是不是你想要的而已
引言: hi change.jian 我想你的問題應該出在Edit1Exit事件裡.在這裡,你的Edit給free了,那麼程式執行完Exit之後,要回到那裡?建議你應該在其他地方呼叫Edit.free <> 在 PageControl -> PageControl1Change 或 TabSheet2 onexit 使用 free 多有問題 ? 因在 TabSheet2 -> button 才產生 動態tedit ,執行後該在那理free ? 或 <> 如何判斷 user 是否按button 產生動態Tedit, 如有在那事件中free比較洽當,不才,不會判斷動態Tedit是否已產生 freeandnil(edit) ->也是一樣 謝謝boss and change.jian 發表人 - chubby 於 2004/06/21 14:48:55
BOSS
中階會員


發表:70
回覆:79
積分:64
註冊:2006-11-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-21 16:51:45 IP:202.154.xxx.xxx 未訂閱
我試了在PageControl1Change寫,並沒錯誤阿
procedure TForm1.PageControl1Change(Sender: TObject);
begin
  if edit <> nil then
    FreeAndNil(edit);
end;
chubby
一般會員


發表:43
回覆:65
積分:21
註冊:2003-05-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-21 18:17:07 IP:61.228.xxx.xxx 未訂閱
if edit <> nil then FreeAndNil(edit); 謝謝boss,點醒我
系統時間:2024-05-18 4:30:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!