PopupMenu in ListBox.Cell

Hallo in die Runde.
Ich möchte in einer Zelle einer Listbox ein PopupMenu nutzen.
Gibt es da etwas fertiges?

Ich habe für das PopupMenu auch keine Möglichkeit gesehen, Einträge zu disablen. Habe ich das übersehen oder geht das nicht?

Gruß, Stefan Mettenbrink.

Im Edit-Modus erscheint das Kontextmenu der TextArea

kann man abschalten mit

[code]Function MouseDown(x As Integer, y As Integer) Handles MouseDown as Boolean

if IsContextualClick then return true
End Function
[/code]

Menu z.B. für Row 2 - Column 3

[code]Function ConstructContextualMenu(base as MenuItem, x as Integer, y as Integer) Handles ConstructContextualMenu as Boolean
Dim xValue As Integer
xValue = System.MouseX - Me.Left - Self.Left
Dim yValue As Integer
yValue = System.MouseY - Me.Top - Self.Top
Dim row, column As Integer
row = Me.RowFromXY(xValue, yValue)
column=Me.ColumnFromXY(xValue, yValue)

If row = 2 and column = 3 then
base.Append new MenuItem (“test”)
End If
End Function[/code]

Function ContextualMenuAction(hitItem as MenuItem) Handles ContextualMenuAction as Boolean if hitItem.Text = "test" then msgbox("menu test") end if End Function

OK, erzeugt ein Kontextmenü.
Das ist nicht ganz, was ich suche. Ich möchte ein GUI-Element (oder etwas das so aussieht und funktioniert) wie ein PopupMenu.
Mein Überlegung war, ein PopupMenu an die passende Stelle einzublenden. Ist allerdings recht aufwändig (soll ja auch mit gescrollt werden).
Ein reines Kontexmenü wäre eine Alternative. Scheint mir auch einfacher zu sein.

Ich hatte 2015 mal so was gemacht, weiss nicht ob es funktioniert da ich kein OSX mehr habe.

https://www.dropbox.com/s/yhau69nm2myisi1/LBembed2.zip?dl=1

Ja, genau das habe ich gesucht. Danke!

Wei jemand, ob man bei dem PopupMenu einzelne Eintrge zeitweise disablen kann?

Das funktioniert mit einem PopupMenu nicht. Dann wirst Du auf MenuItem zurückgreifen müssen. Auch empfehle ich die erste Variante von Axel, denn wie im Demo-Projekt (Axels zweite Variante) von ihm sichtbar wird, funktioniert das ganze mittels DrawInto nur, solange man die ListBox nicht scrollt.

Ich wollte abschlieend noch mitteilen, was ich fr mich als Lsung genommen habe.

In der Listbox habe ich ein MouseDown-Event angelegt. Darin ist nur:

Return true

Zustzlich in MouseUp-Event angelegt und dort ein Men erzeugt:

[code]// Display menu if clicked in PopupMenu column
Dim row As Integer = Me.RowFromXY(x, y)
Dim col As Integer = Me.ColumnFromXY(x, y)

If col = 0 Then
Me.ListIndex = row
Me.Selected(row) = True

Dim base As New MenuItem
base.Append(New MenuItem(“Test 1”))
base.Append(New MenuItem(“Test 2”))
base.Append(New MenuItem(“Test 3”))

Dim selectedMenu As MenuItem
selectedMenu = base.PopUp

If selectedMenu <> Nil Then
me.AddRow selectedMenu.Text
End If
End If
[/code]

Das ist zwar kein Popupmen, damit kann ich aber auch ganz gut leben.

Danke fr die Untersttzung!

Gru, Stefan Mettenbrink.