domenica 13 maggio 2007

Selezionare un elemento ListBox con il tasto destro del mouse

 

Come è noto la selezione degli elementi su ListBox può essere "personalizzata" impostando la proprietà SelectionMode con uno dei valori della lista (enum) "None,One,MultiSimple,MultiExtended".
Tralasciando None e One non voglio pensare che non si possa intuire cosa significhino!, gli altri due permettono la selezione multipla degli elementi, la differenza tra i due è che MultiExtended permette la multiselezione (come MultiSimple) anche mediante l'utilizzo dei tasti Ctrl (control) e Shift.
Per la nostra piccola dimostrazione ho utilizzato l'impostazione "MultiExtended".
Per poter selezionare anche con il click del pulsante destro è necessario identificare l'elemento puntato, ho aggiunto un evento "mousedown" ed il relativo gestore.

private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
    // verifichiamo che si tratti proprio del pulsante destro
   if ((e.Button & MouseButtons.Right) == MouseButtons.Right)
   { 
      // generiamo un nuovo oggetto Point alle coordinate cliccate dal mouse
      Point p = new Point(e.X, e.Y);
      for (int k = 0; k < listBox1.Items.Count; k++)
      {
         // se l'area occupata dall'elemento contiene l'elemento puntato
         // lo inseriamo tra gli elementi selezionati
         if (listBox1.GetItemRectangle(k).Contains(p))
        {
            listBox1.SelectedIndex = k;
            // rigeneriamo il listbox2 mettendoci tutti gli elementi selezionati
            listBox2.Items.Clear();
           foreach (object ob in listBox1.SelectedItems)
               listBox2.Items.Add(ob);
           break;
        }
    }
}

Esempio VB.NET

Esempio C#

Nessun commento: