动态产生控件的事件(100分)

  • 主题发起人 主题发起人 maruixiang
  • 开始时间 开始时间
M

maruixiang

Unregistered / Unconfirmed
GUEST, unregistred user!
运行时产生控件且有事件,但如何像VB那样能够通过控件数组的Index从而
在事件中判断响应事件的控件是第几个,如:
vb中:Private Sub Image1_Click(Index As Integer);若单击第三个控件,
则有Index=2;
delphi中:image1.OnDblClick :=imClick(???),
请问行家,具体如何设置imClick事件才能实现像VB一样的功能呢?
 
使用控件属性Tag,在生成时将不同的控件的Tag付不同的值,当给其付相同的事件时,
在事件过程里通过Tag来判断是那个控件产生的这个事件,在作出反映。
 
可以在控件的tag里设标志。
 
var compindex:integer 初值 0
生成一控件,compindex+
name:=....+inttostr(compindex)

读取时:
str:=name;
delete(str,1,length(...));
compindex:=strtoint(str);
 
沈前卫的方法不错,我同意
 
俺认为应这样:
var
DyLabel: array[1..10] of TLabel;

code:
for i:=1 to 10 do
begin
DyLabel:=TLabel.Create(Self);
with DyLabel do
begin
Parent:=Form1;//记得设,否则不可见
...//其他属性
...
...
OnClick:=DyLabelClick;//设置事件响应函数
end;
end;


//另写一DyLabelClick
procedure DyLabelClick(Sender as TObject);
begin
//Process..
end;
 
使用tag属性
 
事件都有Sender嘛, 还要知道第几干吗?
直接用那个Sender不就行了?
动态生成的控件可以保存在TList中, 这样用TList.IndexOf(Sender)就可以
得到第几啦
 
同意 Another_eYes
 
生成的动态事件要在前面先声明吗?在那里声明?声明成什么形式?
 
例如Form上的Button的OnClick事件,可在Form的定义里预先定义
procedure Button1Click(Sender: TObject);
在动态生成Button时 OnClick:=Button1Click就可以了
其它的事件,只要过程的参数定义一样就可以。
 
to cry
这个事件要先声明一下,但我不知道怎么声名?
 
例子如下:
//Unit1 Code
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure ButtonClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ButtonClick(Sender: TObject);
begin
TButton(Sender).Caption:='OnClick Event OK!';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
With TButton.create(Self) do
begin
parent:=Form1;
OnClick:=ButtonClick;
end;
end;

end.

//Form1
object Form1: TForm1
Left = 192
Top = 154
Width = 471
Height = 243
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 120
TextHeight = 16
object Button1: TButton
Left = 96
Top = 72
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
end
 
多人接受答案了。
 
后退
顶部