Hur gör man för att "selecta" ett alternativ vid högerklick i en ListBox? Har nämligen en meny som kommer när man högerklickar i en ListBox, men vill att alternativet ska bli valt vid högerklick också. Förstår bara inte hur. Två lösningar : Koden fungerade kanonbra, så länge man inte klickade på ett tomt fält i ListBoxen. Några idéer på hur man kan lösa detta? Här kommer en uppgraderad version som kollar att det är höger musknapp som används samt kollar att man har klickat på ett element. Har även gjort om beräkningarna lite så att de stämmer bättre. Håll till godo... Ett jättetack ska du ha! Fungerar kanonbra! Jag gör det misstaget varje gång...det har med olika koordinatsystem att göra...gott att du löste det i alla fall.Högerklick i en ListBox
Mvh
/LavveSv: Högerklick i en ListBox
1) Alternativ lösning : Använd ListView i stället. På den finns en metod som heter HitTest() som tar muscoordinater och kollar vilket element man "träffar".
2) Nedanstående kod gör ett försök att beräkna vilket element som klickas på i en ListBox. Jag har inte testat den utförligt så den kanske måste trimmas lite men med få element så verkar den fungera.
<code>
Private Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim itemheight As Long
' Uppskatta höjden på en listitem
itemheight = (List1.FontSize + 4) * Screen.TwipsPerPixelY
' Beräkna vilket element som klickats
List1.ListIndex = List1.TopIndex + CLng((Y - List1.Top) / itemheight) + 1
PopupMenu mnuPopup, X:=X, Y:=Y
End Sub
</code>Sv: Högerklick i en ListBox
/LavveSv: Högerklick i en ListBox
<code>
Private Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim mItemHeight As Long
Dim mIndex As Long
If Button = vbRightButton Then
mItemHeight = (List1.FontSize + 4) * Screen.TwipsPerPixelY
mIndex = List1.TopIndex + Int((Y - List1.Top) / mItemHeight) + 1
If mIndex >= 0 And mIndex < List1.ListCount Then
List1.ListIndex = mIndex
PopupMenu mnuPopup, X:=X, Y:=Y
End If
End If
End Sub
</code>Sv: Högerklick i en ListBox
Enda ändringen jag gjorde var att jag tog bort ", X:=X, Y:=Y", eftersom menyn hamnade på lite fel ställe då.
/LavveSv: Högerklick i en ListBox