giovedì 29 novembre 2012

Vb.net - Selezione della cella di un DataGridView con il tasto destro del mouse

Ciao a tutti!
Oggi vi mostrerò una cosa che mi ha fatto letteralmente impazzire, ovvero la selezione di una cella di un elemento DataGridView, in Visual Basic 2010, con il tasto destro, allo scopo di far comparire un menù contestuale.

Ecco a voi il codice. Per motivi di spazio ho separato pezzi della stessa riga con il carattere _ andando a capo:

1.  Private Sub DataGridView1_MouseClick(sender As DataGridView,_
                    e As System.Windows.Forms.MouseEventArgs)_ 
                    Handles DataGridView1.MouseClick
2.      If e.Button = Windows.Forms.MouseButtons.Right Then
3.          sender.ClearSelection()
4.          Dim ht As DataGridView.HitTestInfo = sender.HitTest_
                (e.X, e.Y)
5.          If ht.ColumnIndex <> -1 And ht.RowIndex <> -1 Then
6.              sender.Item(ht.ColumnIndex, ht.RowIndex).Selected_

                    = True
7.              ContextMenuStrip1.Show(MousePosition.X,_

                    MousePosition.Y)
8.          End If
9.      End If
10. End Sub
 
Prima di tutto trascinate nella vostra form il controllo ContextMenuStrip che faremo comparire al click. DataGridView1 è il nome del vostro controllo griglia e sender è il riferimento ad esso.


Spiegazione del codice:
 
  • riga 2: imponiamo la condizione che il menu compaia soltanto alla pressione del tastro destro
  • riga 3: specifichiamo di cancellare ogni volta la selezione altrimenti avremmo un multi - select sulla griglia
  • riga 4: impostiamo un oggetto che conterrà informazioni varie sulla cella - che viene selezionata a partire dalle coordinate (e.X, e.Y) del puntatore del mouse - quali gli indici di colonna e di riga
  •  
  • riga 5: mettiamo una condizione per cui se erroneamente clicchiamo sulla barra di intestazione o sul bordo sinistro della DataGridView non venga generata un'eccezione di tipo IndexOutOfRange
     
  • riga 6: selezioniamo la cella attraverso gli indici ricavati dall'oggetto ht precedentemente creato
  • riga 7: facciamo comparire il menu contestuale a partire dal puntatore del mouse, specificando le coordinate (MousePosition.X, MousePosition.Y)


Nel prossimo articolo vedremo come incollare nella nostra DataGridView un elenco di dati prelevati direttamente da excel.

Stay Tuned!