J'ai une application WinForms en C # avec un contrôle ListView. Cette listeView affiche une liste d'éléments à faire et j'utilise l'événement "Étude sélectionné" pour gérer les mises à jour.
Le problème est que l'événement "ItemPELChatChanganed" se déclenche deux fois à chaque fois que j'essaie de faire une mise à jour. P>
L'événement d'origine change Actualise le formulaire pour représenter les mises à jour (c.-à-d. Supprimer l'élément de la liste). p>
est là un moyen de désactiver l'événement de la cuisson après l'actualisation de l'actualisation? P>
private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (e.IsSelected)
{
listView1.Items[e.ItemIndex].Remove();
listView1.SelectedIndices.Clear();
listView1.Focus();
listView1.Update();
}
else
{
}
}
4 Réponses :
Oui, supprimez l'EventHandler au début de l'actualisation et ajoutez-la après avoir fini de rafraîchir
I.E P>
// Remove handler listView1.ItemSelectionChanged -= new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged); // Do refresh // Add again listView1.ItemSelectionChanged += new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged);
Ai-je besoin de références supplémentaires pour le "OnSelectionChanged"?
Non, il vous suffit de remplacer ListView avec le nom de votre listeViewControl I.e. ListView1 et MethodName doit être le nom de la fonction appelée lorsque l'événement OnSelectionChanged est tiré I.E. ListView1_onselectionChanged Si ListView1 est à nouveau le nom de votre listeViewControl
Pour moi, le "onSelectionChanged" ne se présente pas d'intellisense.
Je l'avais légèrement éteint, j'ai mis à jour l'exemple pour le rendre plus clair. Il vous suffit de remplacer ListView1 avec le nom de votre listeView et de la même manière pour ListView1_ItemSélectionChanged. Laissez-moi savoir si vous êtes coincé
Il devrait aller dans la méthode de rafraîchissement, le retirer au début et l'ajout en bas. Si cela ne fonctionne pas, postez le code et je vais vous chercher
Comment collection - = nouvelle chose code> supprimez quelque chose d'une collection? Vous demandez à la collection de supprimer quelque chose qui n'a jamais été ajouté.
@LOTHARYX Ce n'est pas le cas, ce n'est pas une collection, c'est un gestionnaire d'événements. Il est supprimé pour arrêter la mise à jour de l'événement tout en mettant à jour, puis l'ajoute ensuite.
@ W69WDY Un gestionnaire d'événements est i> une collection (de délégués). Je sais ce qu'est la suppression du délégué; Ce que je dis, c'est votre exemple de code ne supprime rien parce que vous supprimez une nouvelle instance de déléguée code> nouvelle code> qui n'a jamais été ajoutée.
Oui, ça va tirer deux fois. Une fois que l'élément précédemment sélectionné est devenu désélectionné à nouveau pour l'élément nouvellement sélectionné. Il vous suffit de vous assurer de voir l'événement de sélection:
private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { if (e.IsSelected) { // Update form //... } }
Merci mais l'éventuellement n'a pas fonctionné pour moi. Il doit y avoir autre chose à propos de mon code qui le garde deux fois.
Non, cela va certainement tirer deux fois. Ceci est par conception. Le but est de détecter celui qui vous intéresse. Ce qui n'est pas si clair de votre question.
Je pense que vous avez besoin de désélectionner manuellement l'article à la fin de votre gestionnaire. P>
listview1.SelectedItem = null; p>
Essayez ceci:
private void ItemSelect() { if(SelectedItem!=null) App.Current.MainPage.Navigation.PushAsync(new Pages.TLAccByCurrency(), true); _selectedItem = null; }