C# Listbox Élément Double-Cliquez Sur L'Événement
j'ai une boîte de liste avec quelques articles. Y at-il de toute façon je peux attacher un double événement de clic à chaque élément?
Item 1
Item 2
Item 3
si je devais double-cliquer L'article 2, Une boîte de messagerie disant "L'article 2" apparaîtrait
Comment faire?
6 réponses
void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
int index = this.listBox1.IndexFromPoint(e.Location);
if (index != System.Windows.Forms.ListBox.NoMatches)
{
MessageBox.Show(index.ToString());
}
}
ça devrait marcher...cochez la case
WinForms
Ajouter un handler d'événement pour le Control.DoubleClick
événement pour votre ListBox
, et dans ce cas handler ouvrir un MessageBox
afficher l'article sélectionné.
par exemple:
private void ListBox1_DoubleClick(object sender, EventArgs e)
{
if (ListBox1.SelectedItem != null)
{
MessageBox.Show(ListBox1.SelectedItem.ToString());
}
}
Où ListBox1
est le nom de votre ListBox
.
notez que vous assignez le gestionnaire d'événements comme ceci:
ListBox1.DoubleClick += new EventHandler(ListBox1_DoubleClick);
WPF
À peu près le même que ci-dessus, mais vous utiliseriez le MouseDoubleClick
événement à la place:
ListBox1.MouseDoubleClick += new RoutedEventHandler(ListBox1_MouseDoubleClick);
et le gestionnaire d'événements:
private void ListBox1_MouseDoubleClick(object sender, RoutedEventArgs e)
{
if (ListBox1.SelectedItem != null)
{
MessageBox.Show(ListBox1.SelectedItem.ToString());
}
}
Edit: réponse de Sisya vérifie si le double-clic s'est produit sur un élément, qui devrait être incorporé dans ce code pour corriger le problème mentionné dans les commentaires (MessageBox s'affiche si ListBox est double-cliqué alors qu'un élément est sélectionné, mais pas cliqué sur un élément).
Espérons que cette aide!
je sais que cette question est assez ancien, mais je cherchais une solution à ce problème. La solution acceptée est pour WinForms pas WPF que je pense que beaucoup de ceux qui viennent ici sont à la recherche.
pour toute personne à la recherche d'une solution WPF , voici une grande approche (via la réponse D'Oskar ici ):
private void myListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
DependencyObject obj = (DependencyObject)e.OriginalSource;
while (obj != null && obj != myListBox)
{
if (obj.GetType() == typeof(ListBoxItem))
{
// Do something
break;
}
obj = VisualTreeHelper.GetParent(obj);
}
}
en gros, vous remontez la VisualTree jusqu'à ce que vous ayez trouvé un élément parent qui est un ListBoxItem, ou vous ascendez vers la liste actuelle (et donc n'a pas cliqué sur un ListBoxItem).
Pour Winforms
private void listBox1_DoubleClick(object sender, MouseEventArgs e)
{
int index = this.listBox1.IndexFromPoint(e.Location);
if (index != System.Windows.Forms.ListBox.NoMatches)
{
MessageBox.Show(listBox1.SelectedItem.ToString());
}
}
et
public Form()
{
InitializeComponent();
listBox1.MouseDoubleClick += new MouseEventHandler(listBox1_DoubleClick);
}
qui devrait aussi empêcher l'événement de tir si vous sélectionnez un élément, puis cliquez sur une zone vide.
je vous montre l'utilisation de Visual Studio,
ce que vous pouvez faire pour le même resualt que vous souhaitez est dans la zone de liste de Propriétés-> Comportement->AutoPostBack changer en "Vrai".
L'espoir qui aidera
C'est très ancien poste, mais si quelqu'un a rencontré un problème similaire et besoin d'une réponse rapide:
- pour capturer si un élément ListBox est cliqué utilisez L'événement MouseDown.
- pour saisir si un élément est cliqué plutôt que l'espace vide dans la liste cocher la case
listBox1.IndexFromPoint(new Point(e.X,e.Y))>=0
- pour capturer l'événement doubleclick, vérifiez si
e.Clicks == 2