Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Gibt es "ME" ? (https://www.delphipraxis.net/109087-gibt-es-me.html)

Baby007 24. Feb 2008 11:31


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

Larsi 24. Feb 2008 11:31

Re: Gibt es "ME" ?
 
Benutz doch einfach Form1.Caption weißt jetzt nicht wo dein Problem ist???

inherited 24. Feb 2008 11:33

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.

thkerkmann 24. Feb 2008 11:33

Re: Gibt es "ME" ?
 
Es heist Self !!

edit: roter Kasten

aber es ist schon richtig: Self entspricht Me und zwar 100 Prozent.

himitsu 24. Feb 2008 11:35

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:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.Caption // an Variable gebunden

  Self.Caption  // an Klasse gebunden
  Caption
end;
[add]
roter kasten ist gut ... hatte zwar einen, aber da stand nur Larsi drin :shock:

[edit]
Kommentare geändeert :angel2:

Daniel 24. Feb 2008 11:35

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".

TBx 24. Feb 2008 11:36

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]

Baby007 24. Feb 2008 11:41

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 !

inherited 24. Feb 2008 11:46

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.

3_of_8 24. Feb 2008 11:53

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:
procedure TMyClass.Wuppdi(Value: Integer);
begin
  Self.Value:=Value;
end;
Ohne das Self.Value würde die Anweisung den Parameter auf sich selbst zuweisen.


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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.
Seite 1 von 2  1 2      

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