Avatar billede noxiaz Nybegynder
26. januar 2007 - 19:57 Der er 8 kommentarer og
1 løsning

Reager ved tryk på tastatur

Davs.. Har tænkt mig et lave et lille nemt spil, men står med et stort problem, kan ikke få C# til at reager når jeg trykker på piltasterne, alt, shit og dvs. andre taster. Det funger kun for bogstaverne og talene :S

public form()
        {
            InitializeComponent();
            this.KeyPress += new KeyPressEventHandler(KeyPressed);
        }
        private void KeyPressed(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            MessageBox.Show("Tast trykket: " + e.KeyChar);
        }

Dette er scriptet og det funger også fint så længe det kun er bogstaverne og talene.. Har spurgt rundt omkring og de fleste siger bare jeg har det rigtige, men det funger altså ikke..

Har brugt en masse tid på at finde noget brugeligt på nettet via google, men intet held.. håber i kan hjælpe bare lidt ! ;) Burde ikke svære så svært igen :D
Avatar billede mcgoat Nybegynder
26. januar 2007 - 20:02 #1
noget der hedder e.KeyCode istedet for e.KeyChar ?

For Space er jo ikke en Char ligesom "g" f.eks
Avatar billede noxiaz Nybegynder
26. januar 2007 - 22:15 #3
mcgoat, har ikke valgmuligheden "e.KeyCode" og den komer slet ikke ind i den void hvis jeg trykker på andre taster then "chars" Og hjemmesiden gør mig ikke klogere :/
Avatar billede crazysnap Seniormester
26. januar 2007 - 22:53 #4
Hej noxjaz,


Du kan sådan set bare override ProcessCmdKey og håndtere tasterne derinde. Har lavet et lille eksempel nedenunder til dig. Du kan bare tilføje flere speciele taster til switch statementet (dem du nu får brug for og som ikke bliver fanget af KeyPress eller KeyDown events'ne).


Så bare tilføj denne metode til din form:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  bool blnSpecialKeys = true;

  switch (keyData)
  {
    case Keys.Right:
        break;
    case Keys.Left:
        break;
    case Keys.Up:
        break;
    case Keys.Down:
        break;
    case Keys.Shift:
        break;
    case Keys.Alt:
        break;
    default:
        blnSpecialKeys = false;
        break;
  }

  if(blnSpecialKeys)
    return true;
  else
    return base.ProcessCmdKey(ref msg, keyData);
}


Håber det var det du søgte efter!


Mvh

- Snap
Avatar billede noxiaz Nybegynder
26. januar 2007 - 23:13 #5
crazysnap, ser godt ud. Men har ingen ide om hvordan jeg bruger det :S Kan ikke ud fra det se hvordan jeg skal få den til at se om nogen taster er trykket ned.. Tror det har været mit problem hele tiden..
Altså det script jeg har nu som ser sådan ud, som går over til void når en tast trykkes:
public form()
        {
            InitializeComponent();
            this.KeyPress += new KeyPressEventHandler(KeyPressed);
        }

Dette giver meget mening for mig, men hvordan med det script du har lavet får jeg den til at skrive med en messagebox "Du trykkede <tasttrykketned>" ?
Avatar billede noxiaz Nybegynder
26. januar 2007 - 23:36 #6
Snap ! :D mange tak nu har jeg fattet ! ;) Mig der var lidt tungnem i starten :D Tak for scriptet, og send et svar ! ;)
forstår dog ik helt hvad
bool blnSpecialKeys = true
og
if(blnSpecialKeys)
    return true;
  else
    return base.ProcessCmdKey(ref msg, keyData);
betyder :/

Måske du lige hurtig kunne give en forklaring på det :D så ville det bare være perfekt ! :D
Avatar billede crazysnap Seniormester
27. januar 2007 - 00:02 #7
Det var da dejligt du kunne bruge det.  :)

Grunden til jeg har tilføjet den boolean (blnSpecialKeys) er at jeg bremser event'en af OnKeyPress og OnKeyDown når der klikkes på en "special-tast" (altså pilene f.eks). Trykkes der ikke på en special-tast sørger "return base.ProcessCmdKey(ref msg, keyData)" for at kalde de andre events. Du kan bare fjerne den boolean, du skal højst sandsynligt ikke bruge det til noget :).

Så du i stedet får:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  switch (keyData)
  {
    case Keys.Right:
        break;
    case Keys.Left:
        break;
    case Keys.Up:
        break;
    case Keys.Down:
        break;
    case Keys.Shift:
        break;
    case Keys.Alt:
        break;
  }

    return base.ProcessCmdKey(ref msg, keyData);
}


Glad for at kunne hjælpe og held og lykke med det! :)


Mvh,

- Snap
Avatar billede noxiaz Nybegynder
27. januar 2007 - 13:37 #8
ahh oki. mange tak for hjælpen ´! Det er bare kanon ! :D
Avatar billede crazysnap Seniormester
27. januar 2007 - 15:51 #9
Og tak for pointene! :)

- Snap :)
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