动态创建事件问题

sunyu1 2004-05-08 09:59:55
如何给动态创建的控件填加事件
...全文
129 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
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;
加载更多回复(3)

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧