![]() |
Gibt es "ME" ?
Gibt es sowas wie das Wort "Me" bei VB auch unter Delphi, womit man das aktuelle Formular ansprechen kann ?
z.B. Form1.Caption ( In VB möglich "Me.Caption") Danke |
Re: Gibt es "ME" ?
Benutz doch einfach Form1.Caption weißt jetzt nicht wo dein Problem ist???
|
Re: Gibt es "ME" ?
Du suchst vermutlich "self" Allerdings wird damit nicht grundsätzlich das aktuelle Formular angesprochen sondern die eigene Instanz der Klasse, was bei Methoden wie ButtonKlick aber dein Formular ist.
Edit @Larsi: Form1.Irgendwas zu schreiben ist schlechter Stil. Dadurch wird das ganze an eine bestimmte Instanz gebunden und ist somit weniger leicht portierber. |
Re: Gibt es "ME" ?
Es heist Self !!
edit: roter Kasten aber es ist schon richtig: Self entspricht Me und zwar 100 Prozent. |
Re: Gibt es "ME" ?
das nennt sich Self, also in den Klassen,
aber du kannst es meistens auch weglassen, da dieses sozusagen als Standardnamespace innerhalb der Klasse existiert.
Delphi-Quellcode:
[add]
procedure TForm1.FormCreate(Sender: TObject);
begin Form1.Caption // an Variable gebunden Self.Caption // an Klasse gebunden Caption end; roter kasten ist gut ... hatte zwar einen, aber da stand nur Larsi drin :shock: [edit] Kommentare geändeert :angel2: |
Re: Gibt es "ME" ?
Form1.Caption hingegen verweist immer auf die Eigenschaft Caption, die im Rahmen von TForm an die Variable Form1 gebunden ist. Wenn Du aus der Methode eines Objekts heraus Felder von genau der selben Instanz -also unabhängig von der Bindung an eine konkrete Variable- ansprechen willst, nutze "self".
|
Re: Gibt es "ME" ?
@Baby007: Herzlich willkommen in der DP. Zu Deiner Frage: Du suchst das Schlüsselwort self.
@Larsi: Mit solchen Aussagen provizierst Du Fehler. Die Verwendung des Instanzenbezeichners (Form1) macht das Objekt für weitere Instanzierungen (z.B. mehrere MDI-Forms des selben Typs) unbrauchbar. Gruß onlinekater [Edit]Ratschläge, irgendetwas in einer Objektdeklaration an eine feste Instanz zu binden, läßt auch schonmal den roten Kasten übersehen :) [/Edit] |
Re: Gibt es "ME" ?
Falls ich die Formulare einen Namen gebe, der manchmal auch mal etwas länger sein kann :lol: , muß ich das immer wieder eingeben oder per Copy/Past arbeiten. Unter VB z.B kann ich , wenn ich im aktuellel Formular bin, immer "Me" benutzen.
Ja, self ist genau das, was ich gesucht habe. Danke an alle für die schnelle Antwort ! |
Re: Gibt es "ME" ?
Wenn du im aktuellen Formular bist(sprich: In Methoden deiner Form-Klasse) brauchst du nichtmal self, es reicht einfach "Caption:='blar'" zu schreiben.
|
Re: Gibt es "ME" ?
Self braucht man nur, um Namenskonflikte zu lösen oder wenn man eine Referenz auf Self übergeben will.
Beispiel für ersteres: (Die Methode Wuppdi soll das Feld "Value" auf den übergebenen Wert setzen)
Delphi-Quellcode:
Ohne das Self.Value würde die Anweisung den Parameter auf sich selbst zuweisen.
procedure TMyClass.Wuppdi(Value: Integer);
begin Self.Value:=Value; end; Beispiel für letzteres: Hier soll die Methode CreateChild eine neue Instanz von TMyClass erstellen, deren "Vater" auf sich selbst setzen und die neue Instanz dann zurückgeben.
Delphi-Quellcode:
function TMyClass.CreateChild: TMyClass;
begin Result:=TMyClass.Create; Result.SetParent(Self); end; |
Re: Gibt es "ME" ?
Bei mir geht es meist darum , das ich häufig etwas schreibfaul bin :oops: und dann kann ich mir durch die Hilfe von Delphi Schreibfehler ersparen und außerdem muß ich mir nicht unbedingt dann merken, wie ich einzelne Objekte Bezeichnet habe, sondern kann mich durchscrollen ( wenn ich ein Label suche, brauche ich dann nur self.lbl.. eingeben und es wird der Rest dann angezeigt).
Wie gesagt , ich bin manchmal sehr bequem.... |
Re: Gibt es "ME" ?
Drück mal Strg+Leertaste. ;)
|
Re: Gibt es "ME" ?
wie gesagt, innerhalb der Klasse und wenn du nicht grad einem anderen Default-Namespace definiert hast (z.B. per with), dann kannst du es ganz weglassen.
und es hat noch 'nen anderen Vorteil ... wenn man mal die Klasse umbenennt, dann bleibt das Self immernoch das Selbe (so wie Result in Funktionen). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz