線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3197
推到 Plurk!
推到 Facebook!

如何判斷某物件(元件)的名字是否存在

答題得分者是:te_hsun
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-07-13 22:30:46 IP:220.140.xxx.xxx 訂閱

不好意思~
我想請問一下
在我formcreate的時候
自動產生了很多的edit元件(edit只是舉例一下)
然後我想要在按下按鈕後就判斷某個edit是否存在

請問有這樣的函數可以找出來這樣的判斷嗎?

簡單的說~~
就是有辦法知道在form裡面可以判斷出"某個元件"嗎??
而不是某類物件

TWJack
一般會員


發表:3
回覆:13
積分:3
註冊:2006-11-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-07-14 00:15:33 IP:59.104.xxx.xxx 未訂閱

實在不是很清楚你的想法

寫一段程式,看看是不是你要的

for i := 0 to self.ComponentCount -1 do
begin
if Components[i] is TEdit then
ShowMessage(Components[i].Name);
end;

你自己應該可以自己變化才對

te_hsun
一般會員


發表:43
回覆:34
積分:20
註冊:2002-03-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-07-14 13:01:08 IP:218.168.xxx.xxx 未訂閱

自己動態建立的元件,如果沒有特別指定name,它不會自己產生,所以 name 是空白的

這段可以找出相同 TEdit 的元件,並且可以設定與取得各值:

function TForm1.CreateEdit: TEdit;
begin
Result:= TEdit.Create(Self);
Result.Parent:= Self;
Result.Text:= Result.Name;
Result.OnClick:= Edit1Click;
end;

為每個 Edit 指定 OnClick 事件後,當 Edit 物件觸發 OnClick 事件,可以由 Sender 判別是哪個物件產生的,並且可以設定與取得各值:

procedure TForm1.Edit1Click(Sender: TObject);
begin
if (Sender is TEdit) then
TEdit(Sender).Text:= '???';
end;

TWJack
一般會員


發表:3
回覆:13
積分:3
註冊:2006-11-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-07-14 16:24:59 IP:59.104.xxx.xxx 未訂閱

function TForm1.CreateEdit: TEdit;
begin
Result:= TEdit.Create(Self);
Result.Parent:= Self;
Result.Name := 'Edit12'; //這裡指定名稱,可以寫個計算Edit數量的function
Result.Text:= Result.Name;
Result.OnClick:= Edit1Click;
end;

老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-07-14 17:39:21 IP:220.132.xxx.xxx 訂閱

謝謝各位的解答
但是~可能各位有點誤解我的意思了

舉例來說~~
我已經自動產生了五個edit元件
(名稱依序為: ed1,ed2,ed3,ed4,ed5)
然後我按下了一按鈕後
必須知道在form中有沒有ed2這個元件
而不是判斷有沒有TEdit這類物件

不知道有沒有人看懂我的意思>"<
不好意思 勞煩大家哩....

te_hsun
一般會員


發表:43
回覆:34
積分:20
註冊:2002-03-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-07-14 19:45:10 IP:61.216.xxx.xxx 未訂閱

那就是在建立 Edit 時指定 Edit.Name 或是其他...例如: Tag 值

然後在你按下按鈕時,去找有沒有你要的名稱或 Tag 的值就好啦...是不是這個問題呢?

procedure TForm1.Button1Click(Sender: TObject);
begin
if EditIsExists('Edit2') then
Application.MessageBox('找到','訊息', 48)
else
Application.MessageBox('沒找到', '訊息', 48);
end;

function TForm1.CreateEdit(const AName: string): TEdit;
begin
Result:= TEdit.Create(Self);
Result.Parent:= Self;
Result.Name:= AName;
end;

function TForm1.EditIsExists(const AEditName: string): Boolean;
var
i: Integer;
begin
Result:= False;
for i:= 0 to ControlCount-1 do
if (Controls[i] is TEdit) then
begin
Result:= UpperCase(TEdit(Controls[i]).Name)= UpperCase(AEditName);
if Result Then Break;
end;
end;

老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-07-15 14:48:42 IP:220.132.xxx.xxx 訂閱

那~請問這可以適用在自動產生元件嗎??
因為我印象中自動產生的元件好像偵測不到@@

還有~UpperCase這是什麼呢??
小弟我沒有看過耶>"<

te_hsun
一般會員


發表:43
回覆:34
積分:20
註冊:2002-03-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-07-15 20:30:16 IP:218.168.xxx.xxx 未訂閱

可以啊....只是找物件的名字啊
UpperCase => 將字串轉成大寫...

jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2006-08-17 12:56:45 IP:210.66.xxx.xxx 未訂閱

try FindComponent();

系統時間:2024-05-17 18:11:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!