請問要如何將元件弄成陣列的樣子? |
答題得分者是:andersonhsieh
|
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
There are many ways to do it, e.g. using the Tag property, FindComponent, create components and store them as a list/array, loop through all components on the form, etc.
j := 1; for i := 0 to Components.Count-1 do begin if Components[i] is TLabel then begin TLabel(Components[i]).Caption := IntToStr(j); inc(j); end; end; |
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言: 您好,Components沒有.Count這個變數或方法耶? sorry, it should be ComponentCount 另外,如果這一些元件,我把它們弄成二維的樣子,而只想要將第一排或第三排做設定,要怎麼做呢?也就是說,是有條件的來做這一些動作。謝謝。 <> class="code">for i := 0 to ComponentCount-1 do begin if (Components[i].Tag in [1,3]) then TLabel(Components[i]).Caption := IntToStr(j); |
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
引言: 可以試試用物件陣列的方式試試,例如 var tt : array[1..10, 1..10] of TButton @@~~飛翔在天際的精靈~~@@ 發表人 - andersonhsieh 於 2002/11/19 10:09:22再給你一段sample看看 var Form1: TForm1; Labels: array[0..9, 0..9] of TLabel; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var i, j: Integer; lb: TLabel; begin for i := Low(Labels) to High(Labels) do begin for j := Low(Labels[i]) to High(Labels[i]) do begin lb := TLabel.Create(self); lb.Parent := Self; lb.Caption := IntToStr(StrToInt(IntToStr(i) IntToStr(j)) 1); lb.Width := 50; lb.Height := 20; lb.Left := j * lb.Width 5; lb.Top := i * lb.Height 5; Labels[i, j] := lb; end; end; end; @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@ |
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
哦,原來是指定一個現有的「程序」過去,居然沒有想到。
對了,後來又發現一個問題!!
如果我「現有」一個 Label10 而且這個元件放在 groupbox 之內,執行以下程式碼,會造成這一些動態產生的 label 不會「屬於」這個 groupbox,而且根本不會對齊這個 label10。如果 label10 不放在 groupbox 之內就不會出現問題了。這怎麼辦呢?
要怎麼讓這一些動態產生出來的元件「屬於」到這個 groupbox 之內?
for i:=1 to 5 do
begin
lb:=TLabel.Create(self);
lb.Parent:=self;
lb.Caption := inttostr(i);
lb.Width:=label10.Width;
lb.Height:=label10.Height;
lb.Left:=label10.Left;
lb.Top:=label10.Top ( 5 30*i);
Labels[i, 1] := lb;
end; 再問一個問題,忽然遇到了,假設我根據上述的方法,指定「程序」(或者是稱為副程式)給一個動態產生的物件。比如說
edit[1,2].onreturnpressed:=labelab_enterpress;
edit[2,2].onreturnpressed:=labelab_enterpress;
edit[3,2].onreturnpressed:=labelab_enterpress; 假設labelab_enterpress裡面有一段程式碼label1.caption:=edit[x,y].text;
現在問題來了,我每一個都讓它去指定相同的副程式。當我按enter時,如果我在edit[1,2]按下enter,我希望它會將 edit[1,2]的.text傳到label1.caption.
而如果我在 edit[2,2]輸入並按 enter ,我希望它會 label1.caption:=edit[2,2].text;依此類推edit[x,y]。 現在的問題是,如果我將每一個edit[x,y].onreturnpressed:=到同一個副程式,就會造成沒有辦法判斷是從那一個edit來按 enter,我這一個 label1.caption 就不知道要接收誰的字串。
反之,如果我建立了很多個副程式,來讓每一個edit[x,y].onreturnpressed:=指定到不同的副程式,那不用說,是很笨的方式,因為,假設有上百個副程式呢? 發表人 - c905165 於 2002/12/03 05:56:46
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩 |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言: 哦,原來是指定一個現有的「程序」過去,居然沒有想到。 對了,後來又發現一個問題!! 如果我「現有」一個 Label10 而且這個元件放在 groupbox 之內,執行以下程式碼,會造成這一些動態產生的 label 不會「屬於」這個 groupbox,而且根本不會對齊這個 label10。如果 label10 不放在 groupbox 之內就不會出現問題了。這怎麼辦呢? 要怎麼讓這一些動態產生出來的元件「屬於」到這個 groupbox 之內? for i:=1 to 5 do begin lb:=TLabel.Create(self); lb.Parent:=groupbox1; lb.Caption := inttostr(i); lb.Width:=label10.Width; lb.Height:=label10.Height; lb.Left:=label10.Left; lb.Top:=label10.Top ( 5 30*i); Labels[i, 1] := lb; end; 再問一個問題,忽然遇到了,假設我根據上述的方法,指定「程序」(或者是稱為副程式)給一個動態產生的物件。比如說 edit[1,2].onreturnpressed:=labelab_enterpress; edit[2,2].onreturnpressed:=labelab_enterpress; edit[3,2].onreturnpressed:=labelab_enterpress; 假設labelab_enterpress裡面有一段程式碼label1.caption:=edit[x,y].text; 現在問題來了,我每一個都讓它去指定相同的副程式。當我按enter時,如果我在edit[1,2]按下enter,我希望它會將 edit[1,2]的.text傳到label1.caption. 而如果我在 edit[2,2]輸入並按 enter ,我希望它會 label1.caption:=edit[2,2].text;依此類推edit[x,y]。 現在的問題是,如果我將每一個edit[x,y].onreturnpressed:=到同一個副程式,就會造成沒有辦法判斷是從那一個edit來按 enter,我這一個 label1.caption 就不知道要接收誰的字串。 反之,如果我建立了很多個副程式,來讓每一個edit[x,y].onreturnpressed:=指定到不同的副程式,那不用說,是很笨的方式,因為,假設有上百個副程式呢? You may want to make use of the Sender parameter passed in the event handler. 發表人 - c905165 於 2002/12/03 05:56:46 |
ericyu
一般會員 發表:2 回覆:18 積分:24 註冊:2002-03-13 發送簡訊給我 |
引言: 再問一個問題,忽然遇到了,假設我根據上述的方法,指定「程序」(或者是稱為副程式)給一個動態產生的物件。比如說 edit[1,2].onreturnpressed:=labelab_enterpress; edit[2,2].onreturnpressed:=labelab_enterpress; edit[3,2].onreturnpressed:=labelab_enterpress; 假設labelab_enterpress裡面有一段程式碼label1.caption:=edit[x,y].text; 現在問題來了,我每一個都讓它去指定相同的副程式。當我按enter時,如果我在edit[1,2]按下enter,我希望它會將 edit[1,2]的.text傳到label1.caption. 而如果我在 edit[2,2]輸入並按 enter ,我希望它會 label1.caption:=edit[2,2].text;依此類推edit[x,y]。 現在的問題是,如果我將每一個edit[x,y].onreturnpressed:=到同一個副程式,就會造成沒有辦法判斷是從那一個edit來按 enter,我這一個 label1.caption 就不知道要接收誰的字串。 反之,如果我建立了很多個副程式,來讓每一個edit[x,y].onreturnpressed:=指定到不同的副程式,那不用說,是很笨的方式,因為,假設有上百個副程式呢? You may want to make use of the Sender parameter passed in the event handler.補充一下, 就像這樣: label1.caption := TEdit(Sender).Text; |
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
parent是解決了。但是,
我試了一些方法,但還是不行,最後的一個方法是這樣,錯在那兒呢?應該怎麼做才對?
這是一個程序:
for i:=2 to maxbedno do
begin
comboboxs[i,5].items.assign(comboboxs[1,5].items);
comboboxs[i,8].items.assign(comboboxs[1,8].items);
edits[i,2].OnReturnPressed:= Edit3ReturnPressed;//就是這一行
end;
這是另一個程序:
procedure TForm4.Edit3ReturnPressed(Sender: TObject);
begin
beep;
edit1.text:=Tedit(sender).text;
end;
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩 |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言:parent是解決了。但是, 我試了一些方法,但還是不行,最後的一個方法是這樣,錯在那兒呢?應該怎麼做才對? 這是一個程序: for i:=2 to maxbedno do begin comboboxs[i,5].items.assign(comboboxs[1,5].items); comboboxs[i,8].items.assign(comboboxs[1,8].items); edits[i,2].OnReturnPressed:= Edit3ReturnPressed;//就是這一行 end; 這是另一個程序: procedure TForm4.Edit3ReturnPressed(Sender: TObject; var Key: char); begin if Key=#13 then begin beep; edit1.text:=Tedit(sender).text; Key := #0; end; end; |
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
|
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
能不能給一個範例,假設是5*5 的動態產生的元件,如下:
edit[1,1],label[1,2],label[1,3],label[1,4],label[1,5]
edit[2,1],label[2,2],label[2,3],label[2,4],label[2,5]
edit[3,1],label[3,2],label[3,3],label[3,4],label[3,5]
edit[4,1],label[4,2],label[4,3],label[4,4],label[4,5]
edit[5,1],label[5,2],label[5,3],label[5,4],label[5,5]
假設我在第 edit[3,1]輸入一個值,按enter,label[3,2]就顯示乘上二的值,label[3,3]就顯示乘上三的值,依此類推。 有例子就比較好理解。
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩 |
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |