![]() |
TListBox mit OnChange?
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! |
Re: TListBox mit OnChange?
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. |
Re: TListBox mit OnChange?
Zitat:
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? |
Re: TListBox mit OnChange?
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...
|
Re: TListBox mit OnChange?
Hallo,
TListBox ist aus der guten alten Win3x-Zeit. Tu dir selbst einen Gefallen und steige auf TListView um. Heiko |
Re: TListBox mit OnChange?
Zitat:
|
Re: TListBox mit OnChange?
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 |
Re: TListBox mit OnChange?
LBN_CHANGE find eich in meinem Windows SDK auch gar nicht.
|
Re: TListBox mit OnChange?
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: ![]() 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 ![]() Dort vor allem auch die Hinweise (LB_SETCURSEL). Nur warum der Aufwand, wenn in TListView alles schon fertsch ist ? ;) Heiko |
Re: TListBox mit OnChange?
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 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