Oh, das geht aber viel einfacher. Und außerdem hast Du (Michael) außer
Acht gelassen, dass die ListBox evtl. noch einen Header besitzt...
Die ListBox-Klasse hat eine Funktion "RowFromXY ( X As Integer, Y As
Integer ) As Integer". D. h. im MouseMove-Event brauchst Du (Stefan)
nur folgendes einzutragen:
me.ListIndex = me.RowFromXY(x,y)
Die ListIndex-Eigenschaft setzt auch gleich die Markierung aller
anderen Zeilen zurück und löst den Change-Event aus. Nur wenn Du
definitiv keinen Change-Event haben willst, kannst Du die Methode von
Michael verwenden – mit dem Unterschied, dass Du die "RowFromXY"
Methode verwendest, anstatt die aktuelle Zeile mit Hilfe der
"RowHeight" zu errechnen. Dazu müsstest Du dann die letzten drei
Zeilen in Michaels Beispiel ersetzen durch:
dim i as Integer = me.RowFromXY(x,y)
me.selected( i ) = true
"selected" stört es nämlich nicht, wenn Du ihm einen Wert < 0 oder >=
ListCount übergibst. Also ist die if-Abfrage hier überflüssig.
Am 17.08.2010 um 14:35 schrieb Michael Köhler:
Mit Hilfe der Mathematik. Einen anderen Weg kenne ich leider nicht. Du
kennst ja die Höhe deiner Zeilen (RowHeigh) und über MouseMove der
Listbox
weist du wo die Maus in der Listbox ist. Dann kannst du dir
ausrechnen über
welcher Zeile die Mouse steht.
Ich würde etwa folgendes ins MouseMove-Event schreiben
Dim i As Integer
For i=0 To me.ListCount-1
me.Selected(i)=false 'alle Zeile deselektieren
Next
i=y/me.RowHeight 'Zeile ermitteln über der die Mouse grade ist
If i > 0 AND i < me.ListCount Then
me.selected(i)=True 'Zeile selektieren über der die Mouse grade ist
End
Grüße Michael
Am 17.08.2010 11:52 Uhr schrieb "Stefan Sicurella" unter
<[email protected]>:
Hi,
ich möchte, dass die Zeile einer Listbox als selektiert markiert
ist wenn die
Maus darüber ist und die selektierte Zeile dann auch quasi der Maus
folgt.
wie bekomme ich heraus über welcher row die Maus gerade steht?
Gruß
Stefan
Gruß
Christian