Avatar billede ahrensberg Nybegynder
28. november 2006 - 13:31 Der er 11 kommentarer og
1 løsning

Test for om key er nede

Hej alle

Kan man teste for om f.eks. Ctrl-tasten er trykket ned? Pt. har jeg lavet en KeyUp der gemmer en bool til true hvis det Ctrl-tasten der trykkes på, og så på KeyUp sætter bool'en til false, hvis det er Ctrl der slippes. Dette kunne jeg dog godt tænke mig at undgå...
Avatar billede Syska Mester
28. november 2006 - 13:48 #1
private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.Alt)
                MessageBox.Show("Alt was pressed");

            if(e.Control)
                MessageBox.Show("Ctrl was pressed");
        }
Avatar billede ahrensberg Nybegynder
28. november 2006 - 13:57 #2
Yup... præcis sådan jeg har gjort.

Mit problem er at jeg i en funktion skal teste for om en knap er nede. F.eks.

private void DoPopup()
{
    if(CtrlIsDown)
    {
          MessageBox.Show("Ctrl is down");
    }
    else
    {
          MessageBox.Show("Ctrl is not down");
    }
}
Avatar billede ahrensberg Nybegynder
28. november 2006 - 13:59 #3
... og hvor funktionen kaldes via klik på en knap.
Avatar billede Syska Mester
28. november 2006 - 14:05 #4
øhhh, kan du ikke kalde den funktion fra KeyDown ?

Tror jeg skal kende sammenhængen for at præcis vide hvor du vil hen ...

// ouT
Avatar billede ahrensberg Nybegynder
28. november 2006 - 14:17 #5
Ok, jeg har et panel med forskellige ting tegnet på. Det panel kan der oprettes bl.a. kasser på. Disse kasser kan bl.a. markeres og flyttes en eller flere af gangen, alt efter hvor mange der er markeret.

Når jeg klikke rundt på kasserne skal den fjerne markeringen fra de forrige valgte, hvis Ctrl ikke er nede, men ikke fjerne markeringen fra de forrige hvis Ctrl er nede. Pt. gør jeg det ved at sætte en bool true ved KeyDown på Ctrl og igen sætte den til false ved KeyUp på Ctrl. Problemet er dog så hvis der kommer en anden form op imellem mit KeyDown og KeyUp...
Avatar billede Syska Mester
28. november 2006 - 18:03 #6
og så når den ikke at køre din KeyUp event, og så sætte at CTRL ikke længere er nede?
Avatar billede ahrensberg Nybegynder
01. december 2006 - 10:20 #7
yup. præcis...
Avatar billede ahrensberg Nybegynder
01. december 2006 - 10:20 #8
Nogen idé?
Avatar billede Syska Mester
01. december 2006 - 11:35 #9
nej ... men min hjerne tænker da lidt over det, synes ikke lige jeg kan finde nogne løsning på det, men måske der er nogen andre herinde som kan hitte en løsning ... jeg skal i hvert fald nok melde tilbage hvis jeg kommer på noget ...

Man kunne måske sætte den til false, når formen bliver aktiv igen ...
Avatar billede ahrensberg Nybegynder
03. december 2006 - 21:06 #10
Come on... :D Flere point! Aaaahhhh...
Avatar billede bitmatic Nybegynder
11. januar 2007 - 18:54 #11
Det kan du sagtens :)

Du skal bare bruge WinAPI kaldet GetAsyncKeyState. Den skal importeres fra user32.

Den returnerer dig en short der fortæller dig om key'en er trykket ned, om den har været trykket ned siden sidst du kaldte funktionen eller om key'en ikke har været rørt.
Alle keys har et nummer. De to ctrl-taster er A2 og A3. Dem spørger man så efter.
Så vidt jeg husker returnerer funktionen 0 (0x0000) hvis ikke tasten er rørt, 1 (0x0001) hvis den har været rørt og -32767 (0x8000) hvis den er trykket ned.

Eksempel:

[DllImport("user32")]
public static extern short GetAsyncKeyState(int vKey);

private void button1_Click(object sender, EventArgs e)
{
    short rightCtrl = GetAsyncKeyState(0xA3);
    short leftCtrl  = GetAsyncKeyState(0xA2);

    textBox1.Text = leftCtrl.ToString() + " " + rightCtrl.ToString();
}
Avatar billede ahrensberg Nybegynder
14. februar 2007 - 12:05 #12
Tak tak... Har ikke tjekket det endnu, da jeg løste det på anden måde, men vil helt sikkert bruge dit svar næste gang! ;o)
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