Avatar billede hehe7777 Nybegynder
29. maj 2006 - 09:57 Der er 5 kommentarer og
1 løsning

Hvordan styrer man KeyEvents?

Jeg skal skifte KeyEvents dynamisk alt efter hvor jeg er i programmet.
Men hver KeyEvent jeg sætter bliver lagt til således at jeg har kører flere events hver gang.
Er det ikke muligt at fjerne den KeyEvent der er sat på i forvejen?

public void tbSetfocus(int i)
{
    switch (i)
    {
        case 1: tbScan.KeyUp += new KeyEventHandler (tbKeyUp_Sales);
        break;
        case 2: tbScan.KeyUp += new KeyEventHandler(tbKeyUp_Payment);
        break;
    }
}
public void tbKeyUp_Sales(object sender, KeyEventArgs e)
{
    if(e.KeyCode == Keys.Return)
    {
        ..do somthing Sales;
    }

}
public void tbKeyUp_Payment(object sender, KeyEventArgs e)
{
    if(e.KeyCode == Keys.Return)
    {
        ..do something else Payment;
    }

}
Avatar billede spif2001 Nybegynder
29. maj 2006 - 10:06 #1
Er ikke helt med på hvad du vil.

Du kan ikke bare trække dem fra igen?

tbScan.KeyUp -= new KeyEventHandler (tbKeyUp_Sales);
Avatar billede hehe7777 Nybegynder
29. maj 2006 - 10:18 #2
Jeg vil styre hvilken KeyEvent der bruges alt efter hvor jeg er i programmet. Hvis jeg er i en salgsfunktion bruges en KeyEvent, men hvis jeg f.eks er gået videre til en betalingsfunktion er det en anden KeyEvent...til den samme control tbScan.

Jeg kan godt bruge tbScan.KeyUp -= new KeyEventHandler (tbKeyUp_Sales);...men så skal jeg vide hvilken KeyEvent der er sat i forvejen. Kan man forespørge på det?
Avatar billede spif2001 Nybegynder
29. maj 2006 - 10:51 #3
hmmm... du kunne evt. proppe den int værdi ind i din controls Tag property og så sætte den hver gang du ændrer eventhandleren. A la:

public void tbSetfocus(int i)
{
    switch (i)
    {
        case 1: tbScan.KeyUp += new KeyEventHandler (tbKeyUp_Sales);
        if((int)tbScan.Tag == 2)
            tbScan.KeyUp -= new KeyEventHandler(tbKeyUp_Payment);
        break;
        case 2: tbScan.KeyUp += new KeyEventHandler(tbKeyUp_Payment);
        if((int)tbScan.Tag == 1)
            tbScan.KeyUp -= new KeyEventHandler (tbKeyUp_Sales);
        break;
    }
    tbScan.Tag = i;
}
public void tbKeyUp_Sales(object sender, KeyEventArgs e)
{
    if(e.KeyCode == Keys.Return)
    {
        ..do somthing Sales;
    }

}
public void tbKeyUp_Payment(object sender, KeyEventArgs e)
{
    if(e.KeyCode == Keys.Return)
    {
        ..do something else Payment;
    }

}

Er ikke eventhandler ekspert, men det er da en mulig løsning om end ikke så pæn ;)
Avatar billede spif2001 Nybegynder
29. maj 2006 - 10:52 #4
og sæt lige tbScan.Tag til 0 inden du starter...
Avatar billede hehe7777 Nybegynder
29. maj 2006 - 12:07 #5
Det var nok en meget god ide at bruge Tag objektet til det. Og så skal jeg også lige sætte Tagen når jeg skifter KeyEvent.
...Det fungerer fint. Tak for dit input. Læg et svar så jeg kan give dig nogle point
Avatar billede spif2001 Nybegynder
29. maj 2006 - 12:08 #6
svar :)
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