Avatar billede kvinther Nybegynder
16. september 2005 - 11:00 Der er 6 kommentarer

Disable event handler midlertidigt.

Jeg har et ListView, som jeg har lavet en select all funktion til.
public static void ListViewSelectAll(ListView lv) {
foreach(ListViewItem item in lv.Items)
    item.Selected = true;
}

Dette virker fint, men hvis der er en event handler på ListView'ets SelectedItemChanged. Bliver denne kaldt for hvert enkelt element, hvilket ikke er hensigtmæssigt i alle tilfælde.

Er der en måde at disable eventhandleren, for senere at enable den igen? Eller er der en smartere måde at gøre det på?
Avatar billede spif2001 Nybegynder
16. september 2005 - 11:27 #1
Jep

men er det ikke SelectedIndexChanged du mener?

Her er en måde:

this.listView1.SelectedIndexChanged -= new System.EventHandler(this.listView1_SelectedIndexChanged);

//kode der skal afvikles uden events fra selectedindexchanged

this.listView1.SelectedIndexChanged += new System.EventHandler(this.listView1_SelectedIndexChanged);
Avatar billede spif2001 Nybegynder
16. september 2005 - 11:28 #2
Dvs i dit tilfælde:

this.lv.SelectedIndexChanged -= new System.EventHandler(this.lv_SelectedIndexChanged);

//kode der skal afvikles uden events fra selectedindexchanged

this.lv.SelectedIndexChanged += new System.EventHandler(this.lv_SelectedIndexChanged);
Avatar billede kvinther Nybegynder
16. september 2005 - 12:40 #3
Jo, det var selvfølgelig index og ikke item.

Det du skriver vil klart virke, men hvad nu når jeg ikke "kender" til lv_SelectedIndexChanged?
Min funktion ligger et helt andet sted i en hjælperklasse, og håndterer kald fra mange forskellige steder. Jeg ved derfor ikke hvilken funktion event handleren er set til.
Avatar billede spif2001 Nybegynder
16. september 2005 - 12:46 #4
Så er du vist nødt til, at have en reference til den Form klasse hvorpå du vil disable / enable eventhandleren.

Så må du lave to public metoder på din Form, en SuspendListView og en ResumeListView, du så kan kalde før og efter du vil ændre eventhandleren.

Hvis det er en helt anden tråd du er i, skal du stadig have en reference til Form klassen, men så skal metoderne kaldes vi Delegates og Form klassens Invoke() metode - men dette burde kun være nødvendigt, hvis hjælpeklassen og Form klassen ikke er samme tråd.
Avatar billede kvinther Nybegynder
16. september 2005 - 13:35 #5
Jeg er i samme tråd.

Jeg arbejder med mange listview i en del forskellige forms. Dvs. der skal laves en suspend for hver form... Tjo, det er måske en mulighed.

Hvad med Reflection? Kan man bruge EventInfo-klassen, til at få fat i et event handle, som man så kan udføre -= og += med?
Avatar billede spif2001 Nybegynder
16. september 2005 - 13:42 #6
Pas - har jeg ikke leget med.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester