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




Antwort per Email an