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

Show方法帶出的Form若Release之後會清除此Form操作過的資料

答題得分者是:小傑克
douglas
初階會員


發表:24
回覆:42
積分:38
註冊:2008-03-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-19 15:47:26 IP:59.125.xxx.xxx 訂閱
我在FormA使用Show方法帶出一個FormB
FormB會把自己處理過的資料輸入到FormA上(例如:StringGrid)
但是當FormB使用Release方法關閉之後,會連帶清除剛剛在FormA所輸入過的資料

之後在FormA使用ShowModal方法帶出FormB
然後使用Close方法關閉,就可以正常操作了

請教各位大大,這是什麼原因?
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-19 16:12:13 IP:61.67.xxx.xxx 未訂閱
FormB會把自己處理過的資料輸入到FormA上

請問你這段是如何帶進去的?
zhouying82
高階會員


發表:150
回覆:272
積分:189
註冊:2004-03-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-19 21:13:04 IP:116.230.xxx.xxx 訂閱
不知道你在FORMB向FORMA输完资料后,
TABLE1.POST;
TABLE1.REFRESH;
这2点如果做了的话,应该是不会有问题的。或者你贴下代码,我们可以看看。
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
douglas
初階會員


發表:24
回覆:42
積分:38
註冊:2008-03-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-02-20 08:38:27 IP:59.125.xxx.xxx 訂閱
上述的問題還沒發展到跟資料庫互動的階段
單純是程式自身的操作而已

FormB我在設計階段就放在Available Forms
使用以下方法呼叫:
if Application.FindComponent('FormB')=Nil then
Application.CreateForm(TFormB, FormB);
FormB.Show;
FormB.Update;

在FromB底下的操作如下:
FormA.StringGrid.Cells[Cols, Rows] := FormB.ADOQuery.FieldByName('FieldName').AsString;

當FormB使用了FromB.Release之後
FromA的StringGrid.Cells裡面的資料就被清空了

FormB的呼叫方式我改用:
if Application.FindComponent('FormB')=Nil then
Application.CreateForm(TFormB, FormB);
FormB.ShowModal;

關閉改用:
FormB.Close;

就又能夠正常操作了.
zhouying82
高階會員


發表:150
回覆:272
積分:189
註冊:2004-03-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-02-20 13:14:01 IP:218.80.xxx.xxx 訂閱

[code delphi]
if Application.FindComponent('FormB')=Nil then // 改为:if form2=nil then
Application.CreateForm(TFormB, FormB);// 改为: form2:=TForm2.create(nil)

[/code]

试试呢?
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
douglas
初階會員


發表:24
回覆:42
積分:38
註冊:2008-03-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-02-23 09:21:10 IP:59.125.xxx.xxx 訂閱
情況一樣, 仍舊因為 Show 搭配 Release 發生問題
改用ShowModal 搭配 Close 就可以正常使用

我程式能正常運作
只是單純想知道為何會有這樣的情況 ?_?

===================引 用 zhouying82 文 章===================

[code delphi]
if Application.FindComponent('FormB')=Nil then // 改为:if form2=nil then
Application.CreateForm(TFormB, FormB);// 改为: form2:=TForm2.create(nil)

[/code]

试试呢?
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-02-25 15:45:55 IP:59.112.xxx.xxx 訂閱
我測試了一下,應該是不會這樣,你發生的狀況應該有別的原因,可能你有再另外處理FormB的close事件

這是我測試的程式,Form1很單純的點grid 開啟form2

procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
for i := 0 to 3 do
begin
for j := 0 to 3 do
begin
StringGrid1.Cells[i,j]:= IntToStr(i j);
end;
end;
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
if Application.FindComponent('Form2')=Nil then
Application.CreateForm(TForm2, Form2);
Form2.Show;
Form2.iRow := StringGrid1.Row;
Form2.iCol := StringGrid1.Col;
end;

//然後Form2只有一個按鈕和TadoQuery

uses unit1;
procedure TForm2.Button1Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'SELECT TOP 1 * FROM 股票資料';
ADOQuery1.Open;
Form1.StringGrid1.Cells[iCol,iRow] := ADOQuery1.FieldByName('證券代號').AsString;
ADOQuery1.Close;
ADOQuery1.Free;
Form2.Release;
end;

當form2 結束關閉後 資料有正確顯示到Form1的Grid上面
------
額有朝天骨,眼中有靈光
douglas
初階會員


發表:24
回覆:42
積分:38
註冊:2008-03-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-03-03 09:36:34 IP:59.125.xxx.xxx 訂閱
感謝大大熱心幫忙測試
我有找過Form Close的事件
就是沒有另外處理這部份的程序才令我感到困惑 @@"
就大大的測試情況看來, 應該真的有某個部分我看遺漏吧
會另外找時間把整支程式重新看過一遍
系統時間:2024-05-15 23:01:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!