Laden...

Scrollen in Listbox - Wie krieg ich das mit?

Erstellt von Gonzo vor 17 Jahren Letzter Beitrag vor 13 Jahren 2.618 Views
G
Gonzo Themenstarter:in
3 Beiträge seit 2006
vor 17 Jahren
Scrollen in Listbox - Wie krieg ich das mit?

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

B
1.529 Beiträge seit 2006
vor 17 Jahren

Hast du schon das Ereignis Scroll entdeckt?

G
Gonzo Themenstarter:in
3 Beiträge seit 2006
vor 17 Jahren

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)

49.485 Beiträge seit 2005
vor 17 Jahren

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

B
1.529 Beiträge seit 2006
vor 17 Jahren

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...

G
18 Beiträge seit 2006
vor 17 Jahren

Hallo Gonzo,

vielleicht hilft Dir das ja weiter...

http://www.codeproject.com/cs/combobox/ScrollingListbox.asp

Beste Grüße
Bob

G
Gonzo Themenstarter:in
3 Beiträge seit 2006
vor 17 Jahren

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

157 Beiträge seit 2008
vor 13 Jahren

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.