8

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

aStr:=tblAcct.FieldByName('Name').Text;

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

aStr:=tblAcct.FieldByName('Name').AsString;

我在加载 TMemo 时都使用过,但似乎没有区别。

aMemo.Lines.Text:=tblAcct.FieldByName('History').Text;
aMemo.Lines.Text:=tblAcct.FieldByName('History').AsString;

有没有理由我应该使用一个而不是另一个?如果有,是哪一个?

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

aMemo.Lines.Assign(tblAcct.FieldByName('History'))

这似乎也很好。

谢谢

4

2 回答 2

20

Text属性旨在用于获取 DataAware 控件中正在编辑的字段的文本表示,与DisplayText为您提供字符串以向用户表示值的属性相反(它可能包含标点符号或其他普通装饰价值)。

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

一个典型的例子是Currency属性设置为的 TFloatField 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;

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

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

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

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

于 2013-04-02T16:04:21.463 回答
2

AsString包含字段的值作为字符串。

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

所以在你的情况下,我认为你应该使用 AsString。

于 2013-04-02T15:57:09.823 回答