请问怎样写一个动态生成的控件的Click事件?

wlw88 2002-09-05 05:38:40
我动态的生成一个checkbox控件,但我不知道该如何编写它的click事件,希望各位大虾帮帮忙!
...全文
30 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
stanely22 2002-09-06
  • 打赏
  • 举报
回复
生成CheckBox的时候加上
CheckBox1.OnClick := CheckBox1OnClick;
然后定义这个过程就可以了 procedure CheckBox1OnClick(Sender: TObject);
要把procedure CheckBox1OnClick(Sender: TObject);加到form的type中去。
要不然程序不认同的。
shadow7880 2002-09-06
  • 打赏
  • 举报
回复
procedure TForm1.Click(Sender:TObject);
begin
if Sender.Checked then
ShowMessage(Sender.Caption);
end;

var
B:TCheckBox;
begin
B:=TCheckBox.Create(Self);
B.Parent:=Form1;
B.OnClick:=Click;
end;
shadow7880 2002-09-06
  • 打赏
  • 举报
回复
procedure TForm1.Click(Sender:TObject);
begin
if Sender.Checked then
ShowMessage(Sender.Caption);
end;

var
B:TButton;
begin
B:=TButton.Create(Self);
B.Parent:=Form1;
B.OnClick:=Click;
end;
wlw88 2002-09-06
  • 打赏
  • 举报
回复
Rich_Zhou(傻乎乎的同舟)你的我看不懂!
colderboy 2002-09-06
  • 打赏
  • 举报
回复
那请问一下能不能动态增加一个过程,也就是说那个过程也是动态生成的,程序原先是没有的?
fwwxxjingling 2002-09-06
  • 打赏
  • 举报
回复
关注一下,呵呵!!
czzw 2002-09-06
  • 打赏
  • 举报
回复
click事件有一个sender参数,调用这个参数的名称就可以得出是那一个checkbox被单击了。
具体的用法是
(sender as Tcheckbox).name
Rich_Zhou 2002-09-06
  • 打赏
  • 举报
回复
procedure TFormNewFile.ListViewDblClick(Sender: TObject);
begin
TemplateCode := TListView(Sender).Selected.SubItems[0];
ModalResult := mrOk;
end;
是给定的ListView控件数组的DblClick方法的定义
vAListView[i] := TListView.Create(self);
vAListView[i].Parent := vATabSheet[i];
vAListView[i].Align := alClient;
vAListView[i].LargeImages := imgView;
vAListView[i].Hint :=Trim(FormMain.tblTreeViewTemp.FieldByName('Code').asString);
vAlistView[i].ViewStyle := vsIcon;
vAlistView[i].OnDblClick := ListViewDblClick;
vAlistView[i].ReadOnly := True;
是对动态生成的ListView控件进行属性定义
vAlistView[i].OnDblClick := ListViewDblClick;
是对所有的ListView控件的OnDblClick进行句柄定义,将其定义为ListViewDblClick,即上面定义的
procedure TFormNewFile.ListViewDblClick(Sender: TObject);
begin
TemplateCode := TListView(Sender).Selected.SubItems[0];
ModalResult := mrOk;
end;
对于ListViewDblClick的声明部分需要和TListView.OnListView声明相符
blazingfire 2002-09-05
  • 打赏
  • 举报
回复
procedure TForm1.Click(Sender:TObject);
begin
//
end;

var
B:TButton;
begin
B:=TButton.Create(Self);
B.Parent:=Form1;
B.OnClick:=Click
end;
dailin 2002-09-05
  • 打赏
  • 举报
回复
ilang(中雨) 的方法应该没问题
lovedandan 2002-09-05
  • 打赏
  • 举报
回复
YourControl.OnClick := YourProc;
wjlsmail 2002-09-05
  • 打赏
  • 举报
回复
ok了
Rich_Zhou 2002-09-05
  • 打赏
  • 举报
回复
type
TFormNewFile = class(TForm)
imgView: TImageList;
pcTemplate: TPageControl;
procedure FormCreate(Sender: TObject);
procedure ListViewDblClick(Sender: TObject);
private
{ Private declarations }
FTemplateCode: string;
procedure SetTemplateCode(const Value: string);
public
{ Public declarations }
property TemplateCode: string read FTemplateCode write SetTemplateCode;
end;

var
FormNewFile : TFormNewFile;
function AddNewFile: string;
implementation
uses FrmMain;
{$R *.DFM}

function AddNewFile: string;
var
FormNewFile : TFormNewFile;
begin
FormNewFile := TFormNewFile.Create(Application);
try
FormNewFile.Visible := False;
if FormNewFile.ShowModal = mrOk then
begin
result := FormNewFile.TemplateCode;
end
else
begin
result := '';
end;
finally
FormNewFile.Free;
end;

end;

procedure TFormNewFile.SetTemplateCode(const Value: string);
begin
FTemplateCode := Value;
end;

procedure TFormNewFile.FormCreate(Sender: TObject);
var
vATabSheet : array of TTabSheet;
vAListView : array of TListView;
vlistViewItem : TListItem;
i, iRecord : integer;
begin
FormMain.tblTreeViewTemp.Active := True;
FormMain.tblTreeViewTemp.Filter := 'NodeClass=2';
FormMain.tblTreeViewTemp.Filtered := True;
iRecord := FormMain.tblTreeViewTemp.RecordCount;
FormMain.tblTreeViewTemp.First;
SetLength(vATabSheet, iRecord);
SetLength(vAListView, iRecord);
for i := 0 to iRecord - 1 do
begin
vATabSheet[i] := TTabSheet.Create(self);
try
vATabSheet[i].PageControl := pcTemplate;
vATabSheet[i].Caption :=
Trim(FormMain.tblTreeViewTemp.FieldByName('Text').asString);
vAListView[i] := TListView.Create(self);
vAListView[i].Parent := vATabSheet[i];
vAListView[i].Align := alClient;
vAListView[i].LargeImages := imgView;
vAListView[i].Hint :=
Trim(FormMain.tblTreeViewTemp.FieldByName('Code').asString);
vAlistView[i].ViewStyle := vsIcon;
vAlistView[i].OnDblClick := ListViewDblClick;
vAlistView[i].ReadOnly := True;
finally
end;
FormMain.tblTreeViewTemp.Next;
end;
for i := 0 to iRecord - 1 do
begin
FormMain.tblTreeViewTemp.Filtered := False;
FormMain.tblTreeViewTemp.Filter := 'FatherCode=' + '''' +
Trim(vAListView[i].Hint) + '''';
FormMain.tblTreeViewTemp.Filtered := True;
FormMain.tblTreeViewTemp.First;
while not FormMain.tblTreeViewTemp.Eof do
begin
vlistViewItem := vAListView[i].Items.Add;
try
vListViewItem.Caption :=
Trim(FormMain.tblTreeViewTemp.FieldByName('Text').asString);
vListViewItem.SubItems.Add(Trim(FormMain.tblTreeViewTemp.FieldByName('Code').asString));
vListViewItem.ImageIndex := 0;
finally
end;
FormMain.tblTreeViewTemp.Next;
end;
end;
end;

procedure TFormNewFile.ListViewDblClick(Sender: TObject);
begin
TemplateCode := TListView(Sender).Selected.SubItems[0];
ModalResult := mrOk;
end;

end.
wlw88 2002-09-05
  • 打赏
  • 举报
回复
我是定义了一个数组控件即abc:array[0..100] of Tcheckbox;
我要求在每一个checkbox的click事件是这样:
i的值是1到100
if abc[i].checked then
showmessage(inttostr(i));
这该怎么写?
xiaohuan 2002-09-05
  • 打赏
  • 举报
回复
同意 ilang(中雨)
u2m 2002-09-05
  • 打赏
  • 举报
回复
ilang(中雨) 回答的没错,你可以再仔细试试
u2m 2002-09-05
  • 打赏
  • 举报
回复
ilang(中雨) 回答的没错,你可以再仔细试试
ilang 2002-09-05
  • 打赏
  • 举报
回复
怎么不行啊 乱说
procedure cbOnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
cb: TCheckBox;
begin
cb := TCheckBox.Create(self);
cb.Parent := Form1;
cb.Caption := 'xx';
cb.OnClick := cbOnClick;
end;

procedure TForm1.cbOnClick(Sender: TObject);
begin
beep;
end;
ScoutKing 2002-09-05
  • 打赏
  • 举报
回复
ilang(中雨) 说的没错
ScoutKing 2002-09-05
  • 打赏
  • 举报
回复
ilang(中雨) 说的没错
加载更多回复(4)

5,388

社区成员

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

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