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;
}
}
}
Nessun commento:
Posta un commento