動態刪除 |
答題得分者是:小傑克
|
boy330077
一般會員 發表:39 回覆:59 積分:19 註冊:2009-10-15 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
作法很多...我介紹一個給你參考, 可以玩玩一些物件相關方法
Button Create (AOwner: TComponent) AOwner 看名字就知道是Button的所有者 當初動態產生的時候如果寫法像這樣 [code delphi] procedure TForm1.Button2Click(Sender: TObject); var b:TButton; begin b := TButton.Create(self); ShowMessage( b.Owner.Name ); // owner 當然就是TForm1 b.Name := 'xxx' IntToStr( Form1.ComponentCount) ; // 名字不能重複 b.Parent := Form1; b.Top := 10; b.Left := 10; end; [/code] 再來要用到幾個component 的方法 ComponentCount , Components[] [code delphi] procedure TForm1.Button3Click(Sender: TObject); var i:integer; begin for i := Form1.ComponentCount-1 downto 0 do begin if (Form1.Components[i] is TButton) then if copy( (Form1.Components[i] as TButton).Name , 1,3) ='xxx' then (Form1.Components[i] as TButton).Free; end; end; [/code] is 這邊用法是判斷 物件是不是 Button ===================引 用 boy330077 文 章=================== 我動態 產生了100個BUTTON 當每按一個 要FREE掉一個 (FREE 就是刪除? 並且當我按下拉下來的BUTTON(另一個非動態產生的) 要怎麼去刪除掉我創的100個(或著剩下創出來的)BUTTON?
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-10-16 20:52:18, 註解 無‧
|
boy330077
一般會員 發表:39 回覆:59 積分:19 註冊:2009-10-15 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
用 (Form1.Components[i] as TButton) 不能知道按誰,用Sender 才能知道,我是看到你裡面說
----------- 要怎麼去刪除掉我創的100個(或著剩下創出來的)BUTTON? ----------- 你一次造100個,剩下沒刪除的當然要跑一個for loop 一次清光啊? 不然一個一個點不是很累嗎 ~ 呵 我只是利用創造button的時候給的name 去判斷是不是自己造的button 然後把造的清掉而已 ===================引 用 boy330077 文 章=================== 請問一下 Component 是什麼意思 為什麼可以用 (Form1.Components[i] as TButton) 就知道 是按誰? 不是用sender嗎? 其他的大概懂
------
額有朝天骨,眼中有靈光 |
boy330077
一般會員 發表:39 回覆:59 積分:19 註冊:2009-10-15 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
|
boy330077
一般會員 發表:39 回覆:59 積分:19 註冊:2009-10-15 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
|
boy330077
一般會員 發表:39 回覆:59 積分:19 註冊:2009-10-15 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
我大概知道你發生的問題, 你刪除的event 寫到 on_MouseUp 裡面應該就不會有問題了
我想你應該是寫在on_Click , 當on_Click 的時候去刪除 Sender , 問題是一個Click event 底下其實是包括 mouse down / up 的event ,而這個是底層會幫你發送的, 當你在click 刪除 button 後 mouse up 的event 的 接收端就不見了, 就會發生一些錯誤 [code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } procedure myMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.myMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin (sender as TButton).free; end; procedure TForm1.FormCreate(Sender: TObject); var b:TButton; i:integer; begin for i := 0 to 99 do begin b := TButton.Create(self); b.Name := 'b' IntTostr(i); b.Parent := form1; b.Width := 50; b.Height := 50; b.Left := (i mod 10) * 55 30; b.Top := ( i div 10 ) * 55 30; b.OnMouseUp := myMouseUp; end; end; end. [/code]
------
額有朝天骨,眼中有靈光 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |