我在公共单位元定义一 EDIT控件的某一事件 ( 积分: 10 )

  • 主题发起人 主题发起人 LJH1978
  • 开始时间 开始时间
L

LJH1978

Unregistered / Unconfirmed
GUEST, unregistred user!
我在公共单位元定义一 EDIT控件
的Enter/EXIT/KeyDown等事件吗?
公共单元
procedure EditEnter(Sender: TObject);
begin
//
end;

引用:
Edit1.OnEnter := EditEnter;
但有个问题,编译不过,是怎么回事,如果在当前窗体则没问题,在公共单元就不行,真是奇怪
 
你看看这个代码,当得到焦点时,表签变成蓝色,失去焦点时,标签变成黑色。
控件用的是editlabel
在公共单元中定义
Procedure ViewEnterColor(myEdit:TLabeledEdit);
Begin
myEdit.EditLabel.Font.Color:=clRed;
end;
调用方式:
ViewEnterColor(TLabeledEdit(Sender));
 
哦,你的意思是
将(Sender: TObject) 换成(myEdit:TLabeledEdit)即可?
 
我试了还是不行
[Error] auto.pas(271): Undeclared identifier: 'EDITEnter'
 
我一直都是这么用的
我刚才的代码只是在keyenter时的,而且我用的控件是editlabel,不是edit

procedure TClwhForm.AeChEnter(Sender: TObject);
begin
ViewEnterColor(TLabeledEdit(Sender));
end;
 
是不是没有Uses中添加相应的单元文件呀
 
Edit1.OnEnter 是对象的过程
EditEnter 是过程
 
不能定义在公共单元,定义到本身表单里面就可以了。

理由如楼上所说
 
to zyycc 为在本窗体可这样定义
TO levi 我有无数个基本窗体,如果这样的话,同一个事件,一些地方修改了,另一些地方没修改,不是很麻烦?
 
以前我也做过类似的事,定的过程是对象过程就可以的!有点忘了![:D]
 
定义到其中一个窗体,其它窗体引用就行了

要不,在公共单元定义一个新类
type
TEvents = class
procedure EditEnter(Sender: TObject);
end;

var
Events: TEvents;

这样就能引用了
Edit1.OnEnter := Events.EditEnter;
 
type TMyedit=class(edit)
private
procedure EditEnter(Sender: TObject);
end;
单元未尾
initialization
myedit:=tmyedit.create(nil);

引用 edit1.onenter=myedit.editenter
 
是不是没有连单元名一起引用.如:
公共单元名为 Unit1则 Unit1.Form1.EditEnter.
 
多人接受答案了。
 
后退
顶部