![]() |
Delphi-Version: 10.3 Rio
Zugriff auf 2 Komponenten
Sorry, mir ist kein besserer Titel eingefallen.
Ich habe 2 Listboxen, die ich auch hier und da außerhalb ansprechen muss. Also das geht dann so etwa (als Beispiel):
Delphi-Quellcode:
Wenn ich "LB.Free" weglasse, geht alles. Irgendwie gefällt mir das sowieso nicht, hier ein ".Free" zu machen. Ist nicht ganz logisch. Aber was passiert mit "LB" (in diesem Fall) ?
//im Class Bereich
ListBox1 : TListBox; ListBox2 : TListBox; Procedure TFrom.PanelMouseMove(Sender: TObject... Var LB : TListBox; Begin If TPanel(Sender).Name = 'N1' Then LB := ListBox1 Else LB := ListBox2; // Hier kann ich dann auf die Listbox die ich möchte zugreifen. // LB.Width oder LB.Hide usw. // Dies vereinfacht vieles für mich LB.Free; // <- dies geht nicht End; |
AW: Zugriff auf 2 Komponenten
LB ist ein Zeiger, der zeigt nur auf was und es können mehrere drauf zeigen.
Free gibt aber das EINE frei, auf das alle zeigen. Du darfst gern
Delphi-Quellcode:
machen, aber ist nicht nötig.
LB := nil;
Zitat:
PS:
Delphi-Quellcode:
bietet etwas mehr Schutz, da hier der Compiler gleich anmeckert, sollte es N1 mal nicht mehr geben.
if Sender = N1 then
|
AW: Zugriff auf 2 Komponenten
Danke für die schnelle Info. Dann mach ich ja alles richtig :)
Aber wegen
Delphi-Quellcode:
... das geht so nicht. "N1" ist ja ein Name, also der Komponentenname vom TPanel (String). So prüfe ich halt, welche ListBox gerade verarbeitet wird/werden muss. Jedenfalls spare ich mir viel Code, wenn ich mir die ListBox in LB zuweise (wie im Beispiel). Nutze auch oft "TListBox(Object). ..." um weniger Code zu haben aber das geht nicht immer. Es kommt halt drauf an... deswegen manchmal das mit dem "LB".
if Sender = N1 then
Schönen Abend wünsch ich noch. |
AW: Zugriff auf 2 Komponenten
Zitat:
Zitat:
|
AW: Zugriff auf 2 Komponenten
Jupp, "N1" ist der Name, und es gibt standardmäßig auch eine Variable, welche "zufällig" genauso heißt, ebenso wie bei deiner
Delphi-Quellcode:
.
ListBox1 : TListBox;
Der Inhalt vom String
Delphi-Quellcode:
interessiert den Compilier nicht, so lange die Syntax für einen "String" korrekt ist,
"N1"
aber ob es die Variable N1 gibt, dass bekommt der Compiler mit. Wenn nicht, dann meckert er brav, z.B. wenn jemand auf Idee kommen sollte dem Panel einen besseren Namen zu geben. :zwinker: |
AW: Zugriff auf 2 Komponenten
Also ich mach doch nicht alles richtig :) *grins
Ich ändere zwar nicht die Komponentennamen aber klar, ich hab unrecht, himitsu hat recht :) Es geht natürlich so *hihi Ich mach's dann mal "richtig" :) Dankeschön Schönes Wochenende Micha |
AW: Zugriff auf 2 Komponenten
Vieles ist möglich, aber nicht alles sollte man machen und eine typsichere Programmierung beugt einfach so vielen Gefahren vor, sodass es nie verkehrt ist sich dieser Arbeitsweise möglichst anzunehmen.
Sag niemals nie, da es schneller passiert, als du denkst. Vielleicht schon morgen oder in paar Jahren. :zwinker: Und wenn das z.B. Panels mit je einer ListBox drauf sind:
Delphi-Quellcode:
oder sicherheitshalber via
Procedure TFrom.PanelMouseMove(Sender: TObject...
Var LB : TListBox; Begin LB := TListBox(TPanel(Sender).Controls[0]);
Delphi-Quellcode:
,
LB := (Sender as TPanel).Controls[0] as TListBox;
vielleicht noch gefolgt von einem
Delphi-Quellcode:
, bzw.
Assert(Assigned(LB));
Delphi-Quellcode:
.
Assert(Assigned(LB), 'irgendwas als Hinweis');
|
AW: Zugriff auf 2 Komponenten
@himitsu
Danke noch für die Info mit "(Sender as TPanel).Controls[0]" usw. Sicherlich könnte ich noch so einiges optimieren aber gerade hier (mit solchen "Parent" Dingen) würde man wohl manchmal den Überblick verlieren. Meine ListBox ist auch ziemlich erweitert... da passiert viel. Sogar eigene Scrollleisten aus TPanels habe ich. Jetzt wo ich recht weit bin, ärgere ich mich ein wenig, dass ich keine neue ListBox-Komponente gemacht habe, sondern im Code selber alles erweitert habe. Überblick behalte ich nur mit viel viel Kommentarzeilen und es kommt auch vor, da steh ich vor einer Codezeile und frage mich "was hab ich denn da gemacht?" :) *grins* und muss mir mein eigener Code wieder ein wenig genauer anschauen bis ich es wieder verstehe *lach |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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 by Thomas Breitkreuz