下面定义的函数和过程都在同一个公共单元中(非窗体单元)
在一个函数中调用方式如下(调用行,就是这一行出错):
datamodule1.query1.FieldByName('XB').OnGetText:=GetName;
在同一个单元中定义的过程如下:
procedure GetName(Sender: TField; var Text: String; DisplayText: Boolean);
begin
with datamodule1.query1 do
begin
close;
sql.Clear;
sql.Add('select [name] from [sex] where [code]=:x');
Parameters[0].Value:=Sender.Value;
open;
Text:=Fields[0].AsString;
end;
end;
解决方法:事件方法必须是类的方法
type
TEventHandlers = class { 建一个虚拟类}
procedure GetName(Sender: TField; var Text: String; DisplayText: Boolean);
end;
...
var
EvHandler:TEventHandlers;
implementation
{方法实现}
procedure TEventHandlers.GetName(Sender: TField; var Text: String; DisplayText: Boolean);
begin
with datamodule1.query1 do
begin
close;
sql.Clear;
sql.Add('select [name] from [sex] where [code]=:x');
Parameters[0].Value:=Sender.Value;
open;
Text:=Fields[0].AsString;
end;
end;
{使用}
datamodule1.query1.FieldByName('XB').OnGetText:= EvHandler.GetName;
本文介绍在Delphi中如何正确地为字段事件设置处理方法,通过创建一个虚拟类来实现事件方法,解决了直接在过程内定义方法作为字段事件处理器的问题。文章详细展示了具体的代码实现,包括类型定义、方法实现及使用示例。
334

被折叠的 条评论
为什么被折叠?



