我刚刚看到他们用过的一些代码(D5)……
@H_502_2@aStr:=tblAcct.FieldByName('Name').Text;
它似乎工作正常,但我一直用…
@H_502_2@aStr:=tblAcct.FieldByName('Name').AsString;我在加载TMemo时使用了两者,但似乎没有区别.
@H_502_2@aMemo.Lines.Text:=tblAcct.FieldByName('History').Text; aMemo.Lines.Text:=tblAcct.FieldByName('History').AsString;有什么理由说我应该使用一个而不是另一个?
如果是这样,哪一个?
实际上对于TMemo,我通常使用……
@H_502_2@aMemo.Lines.Assign(tblAcct.FieldByName('History'))这似乎也很好.
谢谢
解决方法
Text
属性用于获取DataAware控件中正在编辑的字段的文本表示形式,而
DisplayText
属性为您提供了一个字符串来表示用户的值(它可能包含标点符号或其他装饰普通的价值).
Contains the string to display in a data-aware control when the field is in edit mode
典型示例是TFloatField,其Currency属性设置为True. DisplayText为您提供一个字符串,其中包含逗号(如果需要),小数分隔符和货币符号. Text属性为您提供不带逗号或货币符号的字符串.
@H_502_2@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属性.