String 如何轉換為 TButton ? |
答題得分者是:ccchen
|
zeusibson
一般會員 發表:3 回覆:2 積分:1 註冊:2002-08-21 發送簡訊給我 |
我想要用for迴圈將50個Button,name分別為btn1.....btn50一次統統disable掉 Procedure TForm1.Button1Click(Sender: TObject);
Var
intCount:Integer;
objButton:TButton;
begin
For intCount:=1 to 50 do
begin
objButton:=TButton('btn' IntToStr(intCount));
objButton.Enabled:=false;
end;
end; 結果無法執行,我應該怎麼作ㄋ? 我是初學者,請各位多多指教!!!
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
Procedure TForm1.Button1Click(Sender: TObject); Var intCount:Integer; objButton:TButton; begin For intCount:=1 to 50 do begin objButton:=TButton(FindChildControl('btn' IntToStr(intCount))); if objButton <> nil then objButton.Enabled:=false; end; end;發表人 - ccchen 於 2002/08/27 18:14:30 |
zeusibson
一般會員 發表:3 回覆:2 積分:1 註冊:2002-08-21 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
引言: 可是我發現在Delphi 5中這方法行不通耶....也可以換個方法, 檢查form上之control若name為btn1...btn50則disable it procedure Tfmdumy.button1Click(Sender: TObject); var i,id:integer; bname:string; begin for i:=0 to controlcount-1 do //對form上之每一control if Controls[i] is TButton then begin //如果是TButton bname:=Controls[i].name; //以下如開始檢查name是否在要disable if length(bname) > 3 then begin if compareText(copy(bname,1,3), 'btn')=0 then begin //前3個字'btn' try //'btn'後之字元守將轉換成integer故須 確定能轉換 //以避免例如'btnaaa' 之button造成error id:=strtoint(copy(bname,4,length(bname)-3)); if (id>=1) and (id <=50) then TButton(Controls[i]).Enabled:=False; except //若不能轉換, 直接忽略 end; end; end; end; end;[note]若這些button 包含在form上其他元件中, 可將controlcount 改為componentcount, controls[i]改為components[i] |
Jack0323
初階會員 發表:22 回覆:70 積分:28 註冊:2002-03-13 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
用FindCOmponent就可以了啊
所有TWinControl(包括Form)有兩個Array
Components: 所有以此Wincontrol為owner之child
Controls: 所有以此Wincontrol為parent之child owner關係負責管理Memory, 一般DesignTime放入之元件owner均為Form parent關係負責顯示,假設Form上有一Panel, Panel上有一button 則button之parent為panel, owner為form. 若你將panel.visible:=False, button也看不到了 如上述關係,FOrm之Controls array中無button1,故FindControl就找不到了, 但是由於預設狀態下所有Component之owner均為Form故form.findComponent找的到 所以你如果將50個button均放在一個Panel(或Group,或任何WinControl),上只要Disable此panel就可以了 發表人 - ccchen 於 2002/10/14 08:34:58
|
Diviner
初階會員 發表:36 回覆:112 積分:34 註冊:2002-03-13 發送簡訊給我 |
引言: 所以你如果將50個button均放在一個Panel(或Group,或任何WinControl),上只要Disable此panel就可以了 發表人 - ccchen 於 2002/10/14 08:34:58這種方法有個缺點, 就是若你只 Disable 了 Button 所屬的 Panel 的話, 程式使用者將看不出 Button 是處於 Disable 狀態的, 因為 Button 上的字並沒有如期的灰掉, 當然, 這時 Button 確是按不動的, 只是, 用戶可能會因此而感到困惑吧。 不過我也有用這種 Disable panel 的時候, 那就是當我想讓某些 TEdit/TDBEdit Disable 的時候, 我便會使用這種 Disable 方法, 原因是, 我覺得如果直接把 TEdit/TDBEdit Disable 掉的話, 它會連裡面顯示的文字都會灰掉, 我個人覺得不太好看, 所以會分別在 TEdit/TDBEdit 轉換其背景顏色, 然後又 Disable 其所屬的 Panel, 各位朋友可以試試, 會不會好看一點。 -- 小卜子 發表人 - diviner 於 2002/10/15 18:08:27
------
-- 小卜子 |
Emulator
一般會員 發表:1 回覆:18 積分:8 註冊:2002-10-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |