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

動態刪除

答題得分者是:小傑克
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-10-16 14:54:22 IP:112.104.xxx.xxx 訂閱
 我動態 產生了100個BUTTON
當每按一個 要FREE掉一個 (FREE 就是刪除?
並且當我按下拉下來的BUTTON(另一個非動態產生的)
要怎麼去刪除掉我創的100個(或著剩下創出來的)BUTTON?
小傑克
資深會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-10-16 20:49:59 IP:59.112.xxx.xxx 訂閱
作法很多...我介紹一個給你參考, 可以玩玩一些物件相關方法

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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-10-19 18:21:23 IP:112.104.xxx.xxx 訂閱

請問一下 Component 是什麼意思
為什麼可以用 (Form1.Components[i] as TButton) 就知道 是按誰? 不是用sender嗎?
其他的大概懂
小傑克
資深會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-10-19 21:57:33 IP:59.112.xxx.xxx 訂閱
用 (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 引用回覆 回覆 發表時間:2009-11-20 18:34:04 IP:123.204.xxx.xxx 訂閱
高手幫幫忙,

我上次是問想刪除全部,

這次我要指定刪除呢?

指定刪除某一個我創的BUTTON。
小傑克
資深會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-11-20 23:44:31 IP:59.112.xxx.xxx 訂閱
用什麼方式指定?
===================引 用 boy330077 文 章===================
高手幫幫忙,

我上次是問想刪除全部,

這次我要指定刪除呢?

指定刪除某一個我創的BUTTON。
------
額有朝天骨,眼中有靈光
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-11-20 23:48:25 IP:123.204.xxx.xxx 訂閱
 我自己也不知道該用什麼方法
所以才這麼頭痛

也不知道總共有哪些方法
或著比較常用的

可以請高手教教我

目前我在程式內 是有對我產生的按鈕 在NAME 及 TAG 上面做編號 不知道有沒有幫助
小傑克
資深會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-11-21 00:25:31 IP:59.112.xxx.xxx 訂閱
既然有name 也有tag 哪就按上次說的方式依名稱或是依tag 刪除不是ok嗎?
------
額有朝天骨,眼中有靈光
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-11-21 00:41:02 IP:123.204.xxx.xxx 訂閱
 我有想到

也有打進去試試看

編譯都正常

可是觸發到這個事件就會跳出錯誤

說是 Abstract Error
編輯記錄
boy330077 重新編輯於 2009-11-21 00:41:28, 註解 無‧
小傑克
資深會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-11-21 12:05:18 IP:59.112.xxx.xxx 訂閱
我大概知道你發生的問題, 你刪除的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]
------
額有朝天骨,眼中有靈光
系統時間:2024-04-29 8:53:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!