AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zugriff auf 2 Komponenten

Ein Thema von MicMic · begonnen am 14. Mai 2020 · letzter Beitrag vom 17. Mai 2020
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
254 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Zugriff auf 2 Komponenten

  Alt 14. Mai 2020, 15:32
Delphi-Version: 10.3 Rio
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:
//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;
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) ?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.075 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Zugriff auf 2 Komponenten

  Alt 14. Mai 2020, 15:38
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 LB := nil; machen, aber ist nicht nötig.



Zitat:
dies geht nicht
Doch, es geht, aber dann ist die jeweilige ListBox weg.

PS:
if Sender = N1 then bietet etwas mehr Schutz, da hier der Compiler gleich anmeckert, sollte es N1 mal nicht mehr geben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (14. Mai 2020 um 15:42 Uhr)
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
254 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Zugriff auf 2 Komponenten

  Alt 14. Mai 2020, 15:55
Danke für die schnelle Info. Dann mach ich ja alles richtig
Aber wegen if Sender = N1 then ... 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".
Schönen Abend wünsch ich noch.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.619 Beiträge
 
#4

AW: Zugriff auf 2 Komponenten

  Alt 14. Mai 2020, 16:02
Zitat:
Aber wegen if Sender = N1 then ... das geht so nicht.
Zitat:
So prüfe ich halt, welche ListBox gerade verarbeitet wird/werden muss.
Genau das will himitsu dir ja beibringen - undzwar wie man es richtig macht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.075 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Zugriff auf 2 Komponenten

  Alt 14. Mai 2020, 16:19
Jupp, "N1" ist der Name, und es gibt standardmäßig auch eine Variable, welche "zufällig" genauso heißt, ebenso wie bei deiner ListBox1 : TListBox; .

Der Inhalt vom String "N1" interessiert den Compilier nicht, so lange die Syntax für einen "String" korrekt ist,
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (14. Mai 2020 um 16:22 Uhr)
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
254 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Zugriff auf 2 Komponenten

  Alt 15. Mai 2020, 13:48
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.075 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Zugriff auf 2 Komponenten

  Alt 15. Mai 2020, 14:07
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.


Und wenn das z.B. Panels mit je einer ListBox drauf sind:
Delphi-Quellcode:
Procedure TFrom.PanelMouseMove(Sender: TObject...
Var LB : TListBox;
Begin
  LB := TListBox(TPanel(Sender).Controls[0]);
oder sicherheitshalber via LB := (Sender as TPanel).Controls[0] as TListBox; ,
vielleicht noch gefolgt von einem Assert(Assigned(LB)); , bzw. Assert(Assigned(LB), 'irgendwas als Hinweis'); .
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
254 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: Zugriff auf 2 Komponenten

  Alt 17. Mai 2020, 08:51
@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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf