Hallo,
Ich habe ein ListControl in dem ich mit MausClick + MausMove die Elemente selektieren will. Funktioniert alles ganz gut, solange ich nicht scrollen muss. Sobald ich z.B. an den unteren Rand des Controls komme, wird gescrollt (gewuenschter Effekt 8)). Nur kriege ich das nicht mit, weil die Maus sich ja in diesem Fall nicht bewegt. Wie kriege ich nun in nem ListControl mit, dass das Ding gerade scrollt?
Ist vermutlich ne doofe Frage und ne ganz simple Sache, aber ich finds nicht 8)
Gruss
Gonzo
Hmm ich seh keins. Wie soll das heissen?
"Meine" ListBox leitet nur einfach von System.Windows.Forms.ListBox ab.
Ich hab selber keinen Scrollbar dazugebaut. Dieser wird implizit von der Basisklasse
hinzugefuegt. In den Events zur Listbox finde ich kein Scroll Event.
Bin wohl blind 8)
Hallo Gonzo,
nein, ich war auch erst drauf reingefallen und wollte schon vorhin schreiben "Scroll-Ereignis", aber das gibt es bei ListBox eben leider nicht.
herbivore
Sorry, ist mir dann auch aufgefallen.
Eventuell wird ja Layout gefeuert. Ansonsten fiele mir noch ein, dass das Controls-Property vielleicht die ScrollBar enthält?
Die letzte Möglichkeit wäre, dass du die beiden Ereignisse abonnierst, die die ListBox scrollen lassen, ohne dass sich das selektierte Element ändert: MouseClick (auf ScrollBar) und MouseWheel. Alle Tastaturereignisse selektieren ja immer ein neues Element.
EDIT: Mit fällt gerade noch was ein: in einer OwnerDrawn-ListBox wird der Handler doch immer aufgerufen, wenn ein Element dargestellt werden soll. Daraus könnte man doch was basteln...
Hallo Gonzo,
vielleicht hilft Dir das ja weiter...
http://www.codeproject.com/cs/combobox/ScrollingListbox.asp
Beste Grüße
Bob
Hallo,
erstmal danke fuer die Antworten. Die Sache aus Codeproject funktioniert. Zumindest wenn ich auf den Scrollbar klicke. Wenn automatisch gescrollt wird (per mausklick und an den Rand der Listbox bewegen), wird aber anscheinend ne andere Message als WM_VSCROLL (0x115) oder WM_HSCROLL (0x114) an WndProc geschickt. Wisst ihr was da dann geschickt wird?
Gruss
Gonzo
Ich habe mich heute auch mit diesem Thema beschäftigt und bin auf eine Lösung gekommen, die keine eigene ScrollBar verwendet. Die ListBox hat eine Property TopIndex, die den Index des Items angibt, der nach einem ScrollVorgang als oberstes Item gezeichnet wird. Wenn man nun diesen Index z.B. beim Zeichnen abfängt und mit dem gespeicherten letzten Stand vergleicht, merkt man leicht, ob gescrollt wurde oder nicht, sogar in welche Richtung.