近日遇到一个奇怪的问题,请高手们进来看看(关于TField.OnSetText) (50分)

Y

ysai

Unregistered / Unconfirmed
GUEST, unregistred user!
D7,SQLSERVER 2000,TADODataSet,一个Field的OnSetText事件如下
procedure TDMForm.ADS_DJ_FPJZLXSetText(Sender: TField; const Text: String);
begin
//在这里showmessage(text);的值=SJZLX_HX的值!!!!!!
with Sender do
begin
if Text=SJZLX_HX then //直接比较不行,Sender.AsInteger不会改变,
//而且会调用Field.OnGetText事件?????!!!!!!!!我单步测试的
AsInteger:=10;
end;
end;
这个过程达不到效果
改成下面的过程
procedure TDMForm.ADS_DJ_FPJZLXSetText(Sender: TField; const Text: String);
var
s:string;
begin
s:=text; //设一个中间变量
with Sender do
begin
if s=SJZLX_HX then //这样就可以了????????????????晕
AsInteger:=10;
end;
end;
竟然通过??!!!
有哪位同仁遇到过?还有,是怎么回事?
回答前请试试先,OK?
 
因为你的 sender 也有 text 属性,
而你这里要用的 text ,应该是参数。

而你的第二个过程,把 s:=text
移到了 with sender 外面,所以正确


而你的第一个过程if Text=SJZLX_HX then 是在 with Sender 里面
事实上这个 text 是 Sender.text


满意吗???????
 
非常满意,看来with还是得小心点用了,哈
 
有可能是
with Sender do
begin
if Text=SJZLX_HX then // delphi编译器认为这是sender.text 面不是你的参数text 不肯定我遇到过类类似的问题
AsInteger:=10;
end;
end;
 
顶部