06. maj 2005 - 16:32Der er
5 kommentarer og 1 løsning
Fjerne alle events fra button
Hejsa.
Jeg vil gerne fjerne alle click events fra en button at runtime.
Mit problem er, at forskellige klasser sætter en Click event på denne button på forskellige tidspunkter. Men der må hele tiden kun vøre én Click event. Så jeg tænkte at jeg kunne fjerne alle Click events fra denne button, før jeg tilføjede en ny. Men hvordan gør jeg dette?
public delegate void onSubmit(Object sender, EventArgs e);
public onSubmit OnSubmit { set { // // Fjern alle event på knappen her... Hvordan det? //
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
Tja, man kan altså gøre sådan med eventhandlers, som man selv opretter, men altså ikke med eventhandlers af den type som er implementeret for Button.Click.
Efter at have eksperimenteret lidt er jeg kommet frem til følgende løsning som du måske kan bruge. I sin kerne går den ud på at indføre en proxy-eventhandler, som modtager eventet fra "submit.Click" og lader det passere uændret videre til et andet event, "submitProxyClick", som vi selv har defineret (og derfor har meget mere kontrol over end vi altså har over "submit.Click"):
event EventHandler _submitProxyClick = null; public EventHandler submitProxyClick { // Det her kan vi gøre når det er os selv som har oprettet en event. set { _submitProxyClick = value; } }
Når der klikkes på "button" er det altså denne event som skal affyres. Dette opnås ved at rette "submit_Click" til:
Når man ønsker at asssigne nye eventhandleres til "submit.Click" gøres dette ved at assigne dem til "submitProxyClick". Her er der to simple eksempler på mulige eventhandlere man kunne tænke sig at have for "submit.Click":
- og her er koden for hvordan men ved at trykke på "button2" hhv. "button3" kan skifte mellem den ene eller den anden:
private void button2_Click(object sender, System.EventArgs e) { // Her er vi ikke bundet til at skulle bruge "+=" submitProxyClick = new EventHandler(submit_Click_V1); }
private void button3_Click(object sender, System.EventArgs e) { // Her er vi ikke bundet til at skulle bruge "+=" submitProxyClick = new EventHandler(submit_Click_V2); }
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.