La manipulation de double click sur la zone de liste des éléments en C#
Je suis en train de faire quelque chose lors d'un double clic sur un élément d'une liste. J'ai trouvé ce code pour en faire
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());
//do your stuff here
}
}
Cependant, lorsque je clique sur un élément, l'événement n'est pas déclenché. L'événement est déclenché si je clique dans la liste ci-dessous tous les articles.
Je définissez la propriété DataSource de la ListBox
à IList<MyObject>
.
Des idées?
L'idée concernant la vérification de l'e.Clique sur == 1 a déjà été mentionné dans ce fil. Mais voici une autre écriture-up sur cette approche: cf-bill.blogspot.com/2007/04/c-dragdrop-and-doubleclick.html
OriginalL'auteur Hans Espen | 2010-08-08
Vous devez vous connecter pour publier un commentaire.
Essayé de créer un formulaire avec une zone de liste avec les événements MouseDown et DoubleClick événements. Aussi loin que je peux voir, la seule situation, quand DoubleClick ne se déclenche pas, c'est que si à l'intérieur de la MouseDown vous appelez la MessageBox.Spectacle(...). Dans d'autres cas, il fonctionne très bien.
Et encore une chose, je ne sais pas pour vous, si c'est important, mais quand même. Bien sûr, vous pouvez obtenir l'index de l'élément comme ceci:
Mais de cette façon est très bien:
Espen je vois, c'est le blocage de DoubleClick, bien... Alors, vous pouvez le faire de cette façon: à l'intérieur de la MouseDown vérifier le nombre de clics (e.Clics). Si l'e.Clics est égale à 1, alors l'appel DoDragDrop, sinon effectuer toutes les actions en faveur de la DoubleClick.
j'ai manipulé double-cliquez sur l'événement sur la zone de liste, mais je ne peux pas en mesure de déboguer le cas, dès que je double clic, VS est plantage avant d'entrer dans l'événement. Je ne pouvais pas savoir ce qui se passe. S'il vous plaît aider
OriginalL'auteur 26071986
Fonctionne pour moi, je suppose qu'il pourrait y avoir quelque chose sur les éléments de la liste (personnalisé? l'interception de l'événement?) ou de l'événement n'est pas correctement câblé.
Essayez par exemple la (complet Form1.cs):
Avec le concepteur du fichier source (Form1.Le concepteur.cs) contenant ceci:
Comme un test, créer de nouvelles Formes de base de l'application à travers les modèles, puis d'ajouter la zone de liste et définir une classe MyObject. Voir si vous observez le même ou un autre comportement.
OriginalL'auteur Manfred
Merci pour toutes les réponses. Il fonctionne maintenant. Je l'ai résolu, comme 26071986 dit, avec la gestion de la double cliquez dans le MouseDown gestionnaire en vérifiant si des e.Clique sur est 1. Si oui, je les appelle DoDragDrop, si pas, j'appelle la méthode qui gère double-cliquez.
OriginalL'auteur Hans Espen
Voici ce que j'ai utilisé dans le MouseDoubleClick événement.
OriginalL'auteur Brent
John: alors cela fonctionne. Mais j'ai pensé que l'événement n'est pas déclenché parce que je suis aussi de la manipulation de l'événement MouseDown. J'ai essayé d'enlever le MouseDown de la manipulation, et puis il travaille. Est-il une manière fluide à traiter à la fois de ces événements? Si non, il faut juste que je trouve un autre moyen d'attraper un double cliquez sur par le biais de l'événement MouseDown.
OriginalL'auteur Hans Espen