使用.AsString或.Text?

use*_*495 8 delphi delphi-5

我刚刚看到他们使用过的一些代码(D5)......

aStr:=tblAcct.FieldByName('Name').Text;
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,但我一直用...

aStr:=tblAcct.FieldByName('Name').AsString;
Run Code Online (Sandbox Code Playgroud)

我在加载TMemo时使用了两者,但似乎没有区别.

aMemo.Lines.Text:=tblAcct.FieldByName('History').Text;
aMemo.Lines.Text:=tblAcct.FieldByName('History').AsString;
Run Code Online (Sandbox Code Playgroud)

有什么理由我应该使用一个而不是另一个?如果是这样,哪一个?

实际上对于TMemo,我通常使用......

aMemo.Lines.Assign(tblAcct.FieldByName('History'))
Run Code Online (Sandbox Code Playgroud)

这似乎也很好.

谢谢

jac*_*ate 20

Text属性是指被用来获得一个字段的文本表示在DataAware控制正在编辑,与此相反DisplayText,让你一个串来表示的值的用户属性(它可以包含标点或其他装饰到平原值).

包含在字段处于编辑模式时要在数据感知控件中显示的字符串

典型示例是TFloatField,其Currency属性设置为True.在DisplayText为您提供了包含逗号(如果需要的话)的数目,小数点分隔符和货币符号的字符串.该Text属性为您提供不带逗号或货币符号的字符串.

begin
  MyFloatField.Currency := True;
  MyFloatField.AsFloat := 1234.56;
  A := MyFloatField.Text; //'1234.56'
  B := MyFloatField.DisplayText; //'$1,234.56', depends on your locale
end;
Run Code Online (Sandbox Code Playgroud)

上述两个属性都可以自定义编写OnGetText事件处理程序,您可以在其中编写自定义逻辑以转换为字符串表示形式.该DisplayText参数指示所需字符串是否表示要编辑的值.

另一方面,该AsString属性在基本数据类型和字符串之间使用更简单的转换.每个TField后代使用RTL中的函数实现虚拟GetAsString方法以执行该表示.在TFloatField示例之后,此类调用FloatToStr()此目的.

所有这些说,你的问题答案是:如果没有OnGetText事件处理程序,AsString返回与Text属性相同的字符串,但如果有事件处理程序或非标准TField后代,则可能会有所不同.

我不知道什么更适合你,因为它取决于返回值的预期用途,但如果你用它来在UI中显示用户的值(作为你的代码示例),我建议您使用DisplayText属性.