动态创建事件问题

sunyu1 2004-05-08 09:59:55
如何给动态创建的控件填加事件
...全文
95 23 点赞 打赏 收藏 举报
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sunyu1 2004-05-12
谢谢大家,我感动的痛哭流涕,立即结贴
  • 打赏
  • 举报
回复
夜o猫 2004-05-12
咦,虾皮红怎么跑到我前面去了!郁闷!...
  • 打赏
  • 举报
回复
夜o猫 2004-05-12
1、先为窗口类对象建立一个过程或者函数:
procedure TForm1.MyShow(Sender:TObject);
begin
showmessage(‘你按下 NO.'+IntToStr(TButton(Sender).Tag+1)+'按扭')
end;

2、别忘记在窗口类的public或者pirvate部分加入以下声明:
procedure MyShow(Sender:TObject);

3、然后这样:
VAR
btn:array of TButton;

4、再在创建BUTTON时这样写:
...
setlength(btn,100)
for i:=low(btn) to high(btn) do
begin
btn[i]:=TButton.Create(Self) ;
btn[i].tag:=i;//或者 Button.hint:=i;注意,这是关键
btn[i].OnClick := MyShow;
end;
...

OK,至此一切搞定!
记住,动态数组的下标从0开始!
  • 打赏
  • 举报
回复
happyhong 2004-05-12
我来帮你解决,给点实际的:

首先创建全局量
var
CBtem:array of Tcheckbox;

然后再在需要的地方
var
i:integer;
begin
Setlength(CBtem,100);

CBtem[i]:=Tcheckbox.Create(self);
CBtem[i].Parent:=ScrollBox1;
CBtem[i].Left:=20;
CBtem[i].Top:=i*30;
CBtem[i].Width:=200;
CBtem[i].Name:='CBtem'+IntToStr(i);
CBtem[i].Tag:=i;
CBtem[i].Caption:=driverStr;
CBtem[i].OnClick:=myCheckclick;
CBtem[i].Show;
end;

再自定义CBTEM数组的CLICK事件
procedure TForm1.MyCheckClick(sender:tobject);
var
k:integer;
begin

for k:=1 to i-1 do
begin

if (sender as tcheckbox).Tag=k then
begin
做你想做的;
end;

end;

end;
  • 打赏
  • 举报
回复
sunyu1 2004-05-12
没人能解决吗?郁闷……

如果动态创建100个BUTTON每个button实现showmessage(‘你按下 NO.'+X+'按扭')难道要创建100个过程??????????
  • 打赏
  • 举报
回复
happyhong 2004-05-12
我和你的分数还是一样呀,远程导弹
  • 打赏
  • 举报
回复
江宁侯哥 2004-05-11
procedure myfunction(sender:object);
begin
showmessage(‘你按下'+(sender as tbutton).caption+'按扭');
end;

button1 :=tbutton1.Create(self);
button1.Caption :='...';
button1.oncilck:=myfunction;
  • 打赏
  • 举报
回复
sunyu1 2004-05-11
没人能解决吗?郁闷……

如果动态创建100个BUTTON每个button实现showmessage(‘你按下 NO.'+X+'按扭')难道要创建100个过程??????????
  • 打赏
  • 举报
回复
lijinghe1 2004-05-11
同一过程可以付给所有按扭的ONCLICK;
如果在过程中需要知道是哪个按扭点击了可以用sender来判断。
  • 打赏
  • 举报
回复
stiffe 2004-05-11
创建的时候
Button.Targer = i;
则showmessage时显示Button.Targer
  • 打赏
  • 举报
回复
lijinghe1 2004-05-11
procedure TForm1.myfunction(Sender: TObject);
begin
showmessage('怎么还不明白!');
end;


procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i := 0 to 100 do
with TButton.Create(Self) do begin
Parent := Self;
OnClick := myfunction;
end;
end;
  • 打赏
  • 举报
回复
lwj_dxy 2004-05-11
up
  • 打赏
  • 举报
回复
sunyu1 2004-05-11
没人能解决吗?郁闷……

如果动态创建100个BUTTON每个button实现showmessage(‘你按下 NO.'+X+'按扭')难道要创建100个过程??????????
  • 打赏
  • 举报
回复
lijinghe1 2004-05-11
建一个过程,每个button.OnClick := Button1Click;
  • 打赏
  • 举报
回复
sunyu1 2004-05-11
如果动态创建100个BUTTON每个button实现showmessage(‘你按下 NO.'+X+'按扭')难道要创建100个过程??????????
  • 打赏
  • 举报
回复
sunyu1 2004-05-08
fim可以说的详细点吗?
  • 打赏
  • 举报
回复
fim 2004-05-08
预先写下事件处理过程,然后动态绑定
  • 打赏
  • 举报
回复
sunyu1 2004-05-08
是在程序运行是创建的控件,不能在写程序时就知道这个控件叫什么名字啊!
就没法写***.on***这样的代码啊。
  • 打赏
  • 举报
回复
ckendy 2004-05-08
第一个我试了行的。第二个能具体点吗?
  • 打赏
  • 举报
回复
dickeybird888 2004-05-08
var
s:tbutton;
begin
s:=tbutton.create(self);
s.onclick:=mmclick;//设置事件响应函数
end;


//另写一mmClick
procedure mmClick(Sender as TObject);
begin
//Process..
end;
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
Delphi
加入

4967

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2004-05-08 09:59
社区公告
暂无公告