11
votes

LISTVIEW ItemseSélectionnez les feux à deux reprises?

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>

update1: strong> 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
        {

        }

    }


0 commentaires

4 Réponses :


-1
votes

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);


8 commentaires

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 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 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 nouvelle qui n'a jamais été ajoutée.



17
votes

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
            //...
        }
    }


2 commentaires

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.



0
votes

Je pense que vous avez besoin de désélectionner manuellement l'article à la fin de votre gestionnaire.

listview1.SelectedItem = null;


0 commentaires

-1
votes

Essayez ceci:

private void ItemSelect()
{

        if(SelectedItem!=null)
            App.Current.MainPage.Navigation.PushAsync(new Pages.TLAccByCurrency(), true);
        _selectedItem = null;
}


0 commentaires