2013-04-02 13 views
7

Właśnie widziałem kawałek kodu (D5), gdzie kiedyś ...Korzystanie z .AsString lub .Text?

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

wydaje się działać prawidłowo, ale ja zawsze ...

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

Użyłem zarówno podczas ładowania TMemo i znowu nie ma żadnej różnicy.

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

Czy jest jakiś powód, dla którego powinienem używać jednego na drugim? Jeśli tak, to który?

Właściwie dla TMemo, ja zwykle korzystam ...

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

który wydaje się działać zbyt dobrze.

Dzięki

Odpowiedz

19

Obiekt Text ma być wykorzystywane w celu uzyskania reprezentacja tekstowa pola edytowanego w kontroli DataAware, w przeciwieństwie do własności DisplayText który daje ciąg reprezentuje wartość dla użytkownika (może ona zawierać znaków interpunkcyjnych lub inne dekoracje do wartości zwykłej).

Zawiera ciąg do wyświetlania w kontroli danych świadomy, gdy pole jest w trybie edycji

Typowym przykładem jest TFloatField z właściwością Currency ustawiony True. DisplayText podaje ciąg znaków z numerem zawierającym przecinki (jeśli jest to konieczne), separatorem dziesiętnym i symbolem waluty. Właściwość Text daje ciąg znaków bez przecinków lub symbolu waluty.

begin 
    MyFloatField.Currency := True; 
    MyFloatField.AsFloat := 1234.56; 
    A := MyFloatField.Text; //'1234.56' 
    B := MyFloatField.DisplayText; //'$1,234.56', depends on your locale 
end; 

Oba powyższe właściwości mogą być dostosowywane napisanie obsługi OnGetText zdarzenia, gdzie można napisać niestandardowy logiki konwertować wartość na ciąg znaków. Parametr DisplayText wskazuje, czy pożądany ciąg ma reprezentować wartość do edycji, czy nie.

Z drugiej strony właściwość AsString wykorzystuje bardziej zwykłą konwersję między podstawowym typem danych a ciągiem znaków. Każdy potomek TField implementuje wirtualną metodę GetAsString z wykorzystaniem funkcji z RTL w celu wykonania tej reprezentacji. Po przykładzie TFloatField ta klasa wywołuje w tym celu FloatToStr().

Wszystko to powiedziawszy, odpowiedź na Twoje pytanie jest: AsString zwraca ten sam ciąg jako właściwość Text jeśli nie ma OnGetText obsługi zdarzeń, ale może to być inna, jeśli istnieje funkcja obsługi zdarzenia lub niestandardowym TField potomek .

Nie mogę powiedzieć, co jest bardziej odpowiednie dla ciebie, ponieważ zależy to od tego, jakie jest zamierzone użycie dla zwróconej wartości, ale jeśli używasz go do wyświetlenia wartości dla użytkownika w interfejsie (jak twój kod przykład), radzę użyć właściwości DisplayText.

+3

+1 Bardzo wszechstronna odpowiedź –

+0

@stetyguate Dzięki za bardzo szczegółową odpowiedź. OK, teraz wiem, że jest znacząca różnica, może to wyjaśnić, dlaczego miałem problem z wywołaniem Locate, dając mi pozornie niepoprawne wyniki. Nie dlatego zadałem to pytanie, ale szczegóły sprawiają, że wracam do problemu lokalizowania i ponownego przemyślenia tego podejścia. To zły wiatr ... – user2175495

+0

Miło mi pomóc;) – jachguate

2

AsString zawiera wartość pola jako ciąg.

Text zawiera ciąg do wyświetlenia w formancie kontroli danych, gdy pole jest w trybie edycji.

Więc w twoim przypadku myślę, że powinieneś użyć AsString.

+0

Dzięki @Riho, które upraszcza inny problem, który miałem, również niezwiązane z tym pytaniem, ale twój komentarz również wyjaśnił sprawę. – user2175495

Powiązane problemy