Evitare che appaia il popmenu quando si clicca al di fuori di un elemento di una ListView

Da Gambas-it.org - Wikipedia.

Per far sì che non appaia il menu popup, quando si clicca con il tasto destro del mouse al di fuori di un elemento della lista di una ListView, si può adottare un codice quello appresso. [Note 1]

Va precisato che il seguente codice prevede, qualora invece si clicchi con il tasto destro del mouse su un elemento della lista della ListView, che il menu popup venga creato via codice.

Public Sub Form_Open()
 
 With ListView1
   .Add("chiave_A", "aaaaa")
   .Add("chiave_B", "bbbbb")
   .Add("chiave_C", "ccccc")
 End With
  
End


Public Sub ListView1_MouseUp()
 
 Dim menu1, submenu1, submenu2 As Menu
 Dim j, k, b As Byte
  
' Se è stato cliccato all'interno dell'oggetto "ListView" con il tasto destro del mouse...
 If Mouse.Right Then
' ...allora verifica se alle coordinate ove si è cliccato esiste un item valido dell'oggetto "ListView":
   If ListView1.FindAt(Mouse.X, Mouse.Y) Then Return
' Crea innanzitutto il Menu principale:
     menu1 = New Menu(Me)
      
' Poi crea quattro sotto-Menu:
     For j = 1 To 4
       submenu1 = New Menu(menu1)
' Mostra il testo per ciascuno dei quattro sotto-Menu:
       submenu1.Text = "submenu1_" & CStr(j)
        
' Poi crea tre sotto-Menu per ciascun precedente sotto-Menu:
       For k = 1 To 3
         submenu2 = New Menu(submenu1)
         b += 1
' Mostra il testo per ciascuno dei tre sotto-Menu:
         submenu2.Text = "submenu2_" & CStr(b)
' Assegna all'azione, quando si cliccherà su uno dei secondi sotto-Menu, il testo del secondo sotto-Menu medesimo:
         submenu2.Action = submenu2.Text
       Next
     Next
      
' Mostra quindi le finestre di ciascun Menu:
     menu1.Popup
  
 Endif
  
End

Public Sub Action_Activate(azione As String) As Boolean
 
' Mostra in console semplicemente il testo del sotto-Menu cliccato:
 Print azione
  
End


Qualora invece il menu popup sia stato già creato mediante l'Editor Menu dell'IDE di Gambas [Note 2] , si potrà adottare il seguente codice:

Public Sub Form_Open()
 
 With ListView1
   .Add("chiave0", "aaaaa")
   .Add("chiave1", "bbbbb")
   .Add("chiave2", "ccccc")
 End With
 
End

Public Sub ListView1_MouseDown()
 
 ListView1.PopupMenu = Null
 If ListView1.FindAt(Mouse.X, Mouse.Y) Then Return
 ListView1.PopupMenu = "mnuPopup"
  
End

Public Sub Action_Activate(sKey As String) As Boolean
 
 Select Case sKey
   Case "popup-taglia"
     PopupTaglia()
   Case "popup-copia"
     PopupCopia()
   Case "popup-incolla"
     PopupIncolla()
 End Select
 
End

Private Sub PopupTaglia()

 Clipboard.Current = 0
 
 Clipboard.Copy(ListView1.Current.Text)
 
 ListView1.Current.Text = Null
  
End


Private Sub PopupCopia()
 
 Clipboard.Current = 0
 
 If ListView1.Current.Text Then Clipboard.Copy(ListView1.Current.Text)
  
End


Private Sub PopupIncolla()
 
 Clipboard.Current = 0
 
 ListView1.Current.Text = Clipboard.Paste()
  
End


Note

[1] Vedi anche: Creare Menu a finestra

[2] Vedi questa pagina della Wiki: Creare Menu popup utilizzando l’editor di menu