请问如何动态生成控件后再次获得第一个控件的事件 ( 积分: 100 )

  • 主题发起人 主题发起人 徐辰仲
  • 开始时间 开始时间

徐辰仲

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位大侠我用动态生成控件的方法生成了3个控件,如何再获得第一个控件的OnDblClick事件呢?

for I:=1 to 3 do//建立N个单选框
begin
RadioButton:=TRadioButton.Create(Self);
RadioButton.Parent:=Self;
RadioButton.top:=50;
RadioButton.left:=i*100;
RadioButton.Caption:=cap;
RadioButton.OnDblClick:=myDblClick;
也就是说生成好3个控件后我再随机的点取某个控件的,此时要如何才能获得他们各自的OnDblClick事件,如果使用临时变量的话控件数量一多,会不会很慢?麻烦各位了!
 
完全看不明白你说什么!
====
事件中有个sender参数。根据这个sender你可以知到按了那个按钮。
你也以遍历窗口中所有的对象,找到你要的按钮。
 
你加上
RadioButton.tag:=i;//设置你自己的标志。
然后你在自己的过程,myDblClick 里面可以进行判断,
procedure myDblClick(Sender: TObject);
begin
case (sender as tbutton).Tag of
0:...按钮0
1:...按钮1
end
end;
 
楼上的方法可以了。
 
不好意思,在请问壁画一下,如果我建的控件数量是个变量呢?case (sender as tbutton).Tag of
0:...按钮0
1:...按钮1
这语句应该如何更改呢?就是不一定有2个或3个按钮,这个数量是可变的,麻烦了
 
MyRdoButton := TRadioButton.Create(nil); //生成RADIOBUTTON
MyRdoButton.Parent := MyTabSheet;
MyRdoButton.Top := RHeight;
MyRdoButton.Left := Left;
MyRdobutton.Name := ADOQuery_Temp.FieldByName('RdoName').AsString;
MyRdobutton.Caption := ADOQuery_Temp.FieldByName('RdoCaption').AsString;
MyRdoButton.OnMouseDown := RadioButton1.OnMouseDown;
MyRdoButton.Hint := MyRdoButton.Caption;
MyRdoButton.Cursor := crHandPoint;
MyRdoButton.ShowHint := True;
MyRdoButton.Width := 150;
RHeight := RHeight + 20;
 
while not ADOQuery_Temp.Eof do
begin
if Screen.Height = 600 then // 800*600 分辨率
begin
if RHeight >= 150 then
begin
RHeight := 10;
Left := Left + 200;
end;
end
else //1024*768 分辨率
begin
if RHeight >= 300 then
begin
RHeight := 10;
Left := Left + 200;
end;
end;
MyRdoButton := TRadioButton.Create(nil); //生成RADIOBUTTON
MyRdoButton.Parent := MyTabSheet;
MyRdoButton.Top := RHeight;
MyRdoButton.Left := Left;
MyRdobutton.Name := ADOQuery_Temp.FieldByName('RdoName').AsString;
MyRdobutton.Caption := ADOQuery_Temp.FieldByName('RdoCaption').AsString;
MyRdoButton.OnMouseDown := RadioButton1.OnMouseDown;
MyRdoButton.Hint := MyRdoButton.Caption;
MyRdoButton.Cursor := crHandPoint;
MyRdoButton.ShowHint := True;
MyRdoButton.Width := 150;
RHeight := RHeight + 20;
ADOQuery_Temp.Next;
end; //end while
 
如果你是变量,那你是不是应该使用条件语句?
if (sender as tbutton).Tag=??? then 你的代码。
 
如果是这样,那变量的最大值必需要知道,而且变量的每一个值都需要有一个对应的处理函数,这个函数提供给 Case 调用,
case (sender as tbutton).Tag of
0:...按钮0
1:...按钮1
......
end;
如果变量的最大值没有办法预知,那么就没有办法了。
总不能要求程序动态的根据你变量的大小自动生成代码。
 
看来也只有这样了,谢谢各位老大了
 
后退
顶部