AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TListBox mit OnChange?

Ein Thema von PeterPanino · begonnen am 14. Apr 2009 · letzter Beitrag vom 14. Apr 2009
Antwort Antwort
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

TListBox mit OnChange?

  Alt 14. Apr 2009, 01:44
Hallo, das ist eine Frage, die offenbar bereits von tausenden Leuten im Internet gestellt wurde, aber nirgends befriedigend beantwortet wurde (ich habe stundenlang gesucht):

Wie kann man einer TListBox ein OnChange Event hinzufügen? Und zwar so, dass wenn ListBox.ItemIndex programmatisch geändert wird, das Ereignis OnChange aufgerufen wird?

Ein (virtueller) Lorbeerkranz demjenigen, der diese Frage beantworten kann!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TListBox mit OnChange?

  Alt 14. Apr 2009, 01:57
Das ist doch (Entschuldigung) Schwachsinn, wenn du selbst das im Programm änderst, dann hast du doch bereits Code, der ausgeführt wird, wenn der ItemIndex sich ändert...
Du machst also einen Handler für OnClick der ListBox und wenn du selbst den ItemIndex änderst, dann rufst du den auch gleich auf. Wenn der User den ItemIndex ändert, wird der automatisch aufgerufen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: TListBox mit OnChange?

  Alt 14. Apr 2009, 02:04
Zitat von jaenicke:
Das ist doch (Entschuldigung) Schwachsinn, wenn du selbst das im Programm änderst, dann hast du doch bereits Code, der ausgeführt wird, wenn der ItemIndex sich ändert...
Du machst also einen Handler für OnClick der ListBox und wenn du selbst den ItemIndex änderst, dann rufst du den auch gleich auf. Wenn der User den ItemIndex ändert, wird der automatisch aufgerufen.
Glaub mir, es gibt Situationen, wo ein OnChange-Handler ein großes Vereinfachungspotential darstellt ...
Bei kleinen einfachen Programmen geb' ich dir recht, bei sehr komplexen Programmen schaut das ganz anders aus, da ist man über jede Vereinfachung froh. Außerdem war meine Frage nicht, ob es berechtigt ist, sondern wie man das machen könnte?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: TListBox mit OnChange?

  Alt 14. Apr 2009, 02:05
Dann leite dir eine eigene TListBox ab oder schreibe einfach eine Prozedur, der du den neuen Wert übergibst und die dann den OnClick-Handler direkt mit aufruft. Dann ist es auch nur noch eine statt zwei Zeilen...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: TListBox mit OnChange?

  Alt 14. Apr 2009, 08:07
Hallo,

TListBox ist aus der guten alten Win3x-Zeit.
Tu dir selbst einen Gefallen und steige auf TListView um.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TListBox mit OnChange?

  Alt 14. Apr 2009, 09:13
Zitat von hoika:
TListBox ist aus der guten alten Win3x-Zeit.
Tu dir selbst einen Gefallen und steige auf TListView um.
Was soll den jetzt diese blödsinnige Aussage? Wenn ich die erweiterte Funktionalität (mehrere Spalten, Ansichten und Spaltenköpfe) eines Listviews nicht brauche, dann kan ich sehr gut eine Listbox nehmen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: TListBox mit OnChange?

  Alt 14. Apr 2009, 09:15
Hallo,

die Aussage betraf das OnChange.
Mit TListBox ist es nicht möglich, den obigen Wunsch zu erfüllen.

(Auch LBN_CHANGE geht nicht, wie ich ergoogelt habe.)


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: TListBox mit OnChange?

  Alt 14. Apr 2009, 09:24
LBN_CHANGE find eich in meinem Windows SDK auch gar nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: TListBox mit OnChange?

  Alt 14. Apr 2009, 09:28
Hallo,

heisst ja auch LBN_SELCHANGE ...
Hatte der im Artikel (Google) auch falsch getippt.

Könnte man ja probieren per Subclassing (also eigene TListBox-Klasse
und dort WndProc überschreiben).

Startpunkt wäre vielleicht das folgende Tutorial:
Win32-API
Dort nach LBN_SELCHANGE suchen.
Und auch mal die Kapitel davor (es geht ja um WM_COMMAND).

Ausserdem würde ich im MSDN danach suchen
MSDN
Dort vor allem auch die Hinweise (LB_SETCURSEL).


Nur warum der Aufwand, wenn in TListView alles schon fertsch ist ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: TListBox mit OnChange?

  Alt 14. Apr 2009, 15:48
Das Problem ist, dass bei einer Änderung des ItemIndex die Information über die Änderung nicht an die Komponente geschickt wird (wie bei einer Änderung durch den Benutzer), sondern dass die Komponente die Änderung an das Control schickt. Und deshalb bekommt man davon eben nichts mit.

Ganz einfach, weil es eben normalerweise hinderlich wäre, wenn auch eigene Aktionen per Code das Event auslösen. Schließlich könnte so etwas bei entsprechender Programmierung dann auch einen Ping-Pong-Effekt geben, usw., zudem ist so eine Funktionalität eben absolut überflüssig.

Wenn der Benutzer einen anderen Eintrag auswählt, gibt es ja ein Event (OnClick, welches auch bei einer Änderung per Tastatur ausgelöst wird).

Da man bereits Code hat, der ausgeführt wird, wenn eine eigene Änderung per Code durchgeführt wird, braucht man kein Event. Wenn man dort Code ausführen will, kann man das auch direkt tun. Wenn man dies oft benötigt, kann man eine eigene Prozedur schreiben, die die Änderung und das Auslösen des OnClick-Ereignisses kombiniert.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort


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:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz