Avatar billede lajer Nybegynder
06. maj 2005 - 16:32 Der 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?
        //

        submit.Click += new EventHandler(value);
    }
}
Avatar billede nielle Nybegynder
06. maj 2005 - 16:41 #1
Har du prøvet den helt simple?

public onSubmit OnSubmit
{
    set
    {
        submit.Click = null;
        submit.Click += new EventHandler(value);
    }
}
Avatar billede nielle Nybegynder
06. maj 2005 - 16:53 #2
Den virker, men det gør denne her også:

public onSubmit OnSubmit
{
    set
    {
        submit.Click = new EventHandler(value);
    }
}
Avatar billede lajer Nybegynder
06. maj 2005 - 18:18 #3
Jeg mente bestemt at man ikke kan sætte events på den måde.
Jeg for også følgende exception når jeg compiler.

Error 1 The event 'System.Windows.Forms.Control.Click' can only appear on the left hand side of += or -=
Avatar billede nielle Nybegynder
06. maj 2005 - 22:09 #4
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:

private void submit_Click(object sender, System.EventArgs e)
{
    if (_submitProxyClick != null)
        _submitProxyClick(sender, e);
}

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":

static int Counter1 = 0;
private void submit_Click_V1(object sender, System.EventArgs e)
{
    Counter1++;
    this.textBox1.Text = Counter1.ToString();
}
       
static int Counter2 = 0;
private void submit_Click_V2(object sender, System.EventArgs e)
{
    Counter2++;
    this.textBox1.Text = Counter2.ToString();
}

- 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);
}
Avatar billede lajer Nybegynder
06. maj 2005 - 22:23 #5
Gyldig idé du kom med der. Havde håbet at man kunne rytte alle events fra Click på en button, men din idé der er lige så fin.

Smid en svar!

btw - smed lige lidt god karma efter dig. Fuldt fortjent efter det meget flotte og dybdegående svar. Thumbs up.

Smid et svar, så for du også dine points :-D
Avatar billede nielle Nybegynder
06. maj 2005 - 22:25 #6
Svar, og takker :^)
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