2013-04-02 33 views
7

我剛剛看到一些代碼,他們使用(D5)...使用.AsString或.Text?

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')) 

這似乎很好地工作過。

感謝

回答

19

Text屬性用於獲取DataAware控件中正在編輯的字段的文本表示形式,與DisplayText屬性相反,該屬性爲您提供了一個字符串以表示用戶的值(可能包含標點符號或其他裝飾爲普通值)。

包含在一個數據感知控制時顯示字段處於編輯模式

一個典型的例子是與Currency屬性設置爲True一個TFloatField的字符串。 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()

這一切都表示,回答你的問題是AsString返回相同的字符串作爲Text財產如果沒有OnGetText事件處理程序,但它可能是不同的,如果有一個事件處理程序或非標準TField後裔。

我不能說出什麼更適合你,因爲它取決於返回值的用途,但是如果你使用它在UI中向用戶顯示值(因爲你的代碼例如),我建議你使用DisplayText屬性。

+3

+1非常全面的答案 –

+0

@jachguate感謝您的非常詳細的答案。好的,現在我知道有一個顯着的差異,這可能可以解釋爲什麼我一直有一個定位調用給我看似不正確的結果的問題。不是我問這個問題的原因,但是你的細節讓我回到了定位問題,並重新思考了這種方法。這是一個不好的風... – user2175495

+0

很高興幫助;) – jachguate

2

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

Text包含字段處於編輯模式時顯示在數據感知控件中的字符串。

所以在你的情況下,我認爲你應該使用AsString。

+0

感謝@Riho,這簡化了我遇到的另一個問題,也與這個問題無關,但是您的評論也清除了一些問題。 – user2175495

相關問題