动态创建一组相同控件如何得到没每个控件的事件?(100分)

  • 主题发起人 主题发起人 xxsjw
  • 开始时间 开始时间
X

xxsjw

Unregistered / Unconfirmed
GUEST, unregistred user!
程序中动态创建了一组相同控件,共用一个事件响应程序 并且也对控件的TAG属性赋值,
为什么事件响应程序总是对最后创建的控件起作用 以前创建的控件不响应事件程序
请指点
请给个详细例子
多谢了.
 
在事件里
if (Sender as XXXX).Tag = X then
.....
 
通常动态创建构件都要用数组或者链表来维护,下面的例子我没用(打字比较累,呵呵)
不会有你说的那种现象啊。
procedure TForm1.MyEvent(Sender: TObject);
begin
ShowMessage('adf');
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Btn : TButton;
begin
Btn := TButton.Create(Form1);
Btn.Parent := Form1;
Btn.Top := y;
Btn.Left := x;
Btn.OnClick := MyEvent;
end;
 
有点象骗分:) 组合一下前两位的答案。
创建用数组。
for i:=1 to x do
begin
btn:=tbutton.create(self);
btn.tag:=i;
end;
事件里加判断
if (Sender as button).Tag = X then
.....
 
如果是这样,我猜想你一定没有对每一个控件运行构造函数。
var
Btn: TButton;
i: Integer;
begin
for i := 1 to 10 do begin
Btn := TButton.Create(Self);
with Btn do begin
Tag := i;
Left := ...
Top := ...
Caption := ...
Parent := Self;
end;
end;
end;

 
》没有构造函数控件还可以出来?
》也不可能没有给事件付值,否则不会有最后创建的响应啊!

有没有把以前创建的控件的事件清空?

还是你把那些部分贴出来的好!
 
同意 unreal的方法

我也是如此用的,但是在自定义过程中,
参数列表一定要和你所要相连的事件一致
然后用tag属性来区分各个控件
delphi中,事件列表类似与属性,可以直接赋值
也就是自定义过程的句柄
至于何时动态创建控件,就看你的需要了
 
我的程序是这样写的
var
Btn: TButton;
i:integer;
procedure myMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Btn.Tag = 1 then
Btn.Font.color:=clred;
if Btn.Tag = 2 then
Btn.Font.color:=clblue;
...................
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

begin
i:=i+1;
Btn := TButton.Create(self);
Btn.Parent := Form1;
Btn.Top := y;
Btn.Left := x;
Btn.tag:=i;
Btn.OnClick :=myMouseDown;
end;
运行时和我说的相同
该如何写?
btn 怎样声明?
多指点 。
 
多人接受答案了。
 
呵呵,知道哪里错了吧!!!
 
后退
顶部