对于一般的将过程赋予给控件的单击大事件,相信大家都知道了,用form1.button1.onclick:=过程名就可以了,但是这有个前提就是这个过程必须是在form1所属的那我想问一下如果不想在form1中写这个过程有什么办法呢如果你没有听懂,我举个小例子有一个窗体form1,form1上有一个button1,然后我另建一个unit2单元,在里面有个过程aa,现在怎么可以将这个过程赋给button1.onclick,用form1.button1.onclick:=aa 不行,有谁知道,肯告诉我么
比如是Tform2类
在form1中先创建form2,再用下面的代码:
button1.onclick:=form2.aa
怎么会不行呢?
uses unit2
然后
button1.onclick:=form2.aa
就行,主要是用在implement后添加uses unit2
再试试……
button1.onclick:=form2.aa
好使呀!
implementation
uses unit2;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
unit2.Form2.aa;
end;
public
{ Public declarations }
procedure aa;
procedure TForm2.aa;
begin
showmessage('好使呀!')
end;
也可以的啊,您不是想散分吧?
procedure isright();implementationprocedure isright();
begin
showmessage('asd');
end;unit1:
uses unit2;procedure TForm1.Button1Click(Sender: TObject);
begin
isright();
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TMainForm = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
MainForm: TMainForm;implementation
uses Unit2;{$R *.dfm}procedure TMainForm.FormCreate(Sender: TObject);
var
m: TMethod;
begin
m.Code := @a;
m.Data := Button1;
Button1.OnClick := TNotifyEvent(m);
end;end.
///////////////////
unit Unit2;interface
uses Stdctrls, Dialogs;procedure a(Sender: TObject);implementationprocedure a(Sender: TObject);
begin
ShowMessage(TButton(Sender).Name);
end;end.
我是想一个按钮可以实现几种功能,你的...哎,大家自己看吧。
因为我的这个按钮是动态生成的,然后又指向了一个别的按钮(主要是因为那个按钮的图形好,而动态生成的按钮加载图片如果脱离了本机,就不行了,),因此要覆盖掉原来的单击事件,各位这次懂了么?
成功就给分
public
{ Public declarations }
procedure aa(sender:Tobject);
如果你能够容忍TForm2.aa函数内的Self为Form1,那么改一下达摩师祖的方法可以,procedure TForm1.FormShow(Sender: TObject);
var
M: TMethod;
begin
M.Code := @TForm2.Button1Click;
M.Data := Self;
Button1.OnClick := TNotifyEvent(M);
end;
但是还是那一句,不如写在Form1。不知道说得清楚不清楚。
最后补充的是,纯属个人意见,如果有错,不要扁我。
因为我在unit1单元里是一些别的功能,如果把这个也放进去,会给以后的维护增加很多麻烦另外我不会分配form2,只有 unit2。unit2只是负责一个单独功能的。确实,写在form1中就可以解决这个问题,但我想知道这个问题的解决办法
Good Source!
但是你为什么一定要创建一个单元呢。你可以在公共单元写一个公共的类,把原先你要写的方法定成这个类的方法不就可以了吗?我试了一下是没有问题的。这样岂不是简单的解决了这个问题,或者建个数据模板也可啊。
begin
......
aa;
......
end;