[C#] KeyPress Afhandelen

Pagina: 1
Acties:

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 12-02 13:20
Hallo,

Voor school moet ik een spelletje maken.
Heb al de basis, objecten, modellen voor de structuur van het spelletje.
Maar nu wil ik de keypresses op het form afvangen. Maar om de een of andere reden lukt dit niet.

Dit heb ik achter de Form1_KeyPress hangen:
C#:
1
2
3
4
5
6
        private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {

            this.GameHandle.HandleKeyPress(sender,e);
        
        }


Wat weer verwijst naar:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
        public void HandleKeyPress(Object o, KeyPressEventArgs e)
        {

            if (e.KeyChar == (char)Keys.Left)
            {         
                
                this.Aircraft.FlyLeft();
            
            }

            if (e.KeyChar == (char)Keys.Right)
            {

                this.Aircraft.FlyRight();
            
            }

            if (e.KeyChar == (char)Keys.Space)
            {

                this.Aircraft.DropBomb();

            }

            e.Handled = true;

        }

//(Ja dit wordt nog eens een switch)



Nu heb ik al met breakpoints liggen klommelen, maar het lijkt alsof hij nooit in de functie HandleKeyPres aankomt.

Wat doe ik fout en moet ik veranderen dat mijn keypresses wel worden geregistreerd/afgehandeld.

  • Viper®
  • Registratie: Februari 2001
  • Niet online
Komt ie wel in je keypress event handler van je form ?

je hebt bij je eigen functie trouwens Object. Dit moet denk ik object zijn

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 12-02 13:20
Nee hij komt niet aan in Form1_KeyPress. Heb ik getest met een breakpoint. en heb Object in object veranderd. Ook dit geeft geen verschilt, logisch want hij voert de functie niet eens uit.

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
je had natuurlijk al gezocht en gezien dat er een heleboel tutorials zijn.

in al deze tuto's staan volgens mij wel stukjes code...

edit:
als hij al niet in de Form1_KeyPress komt dan is er denk ik iets anders aan de hand. heb je misschien een onkeydown die iets met de .handled doet?
of zijn er ergens in klasses waar jij van overerft al keypress events opgevangen?

[ Voor 22% gewijzigd door BasieP op 27-10-2006 17:38 ]

This message was sent on 100% recyclable electrons.


  • Viper®
  • Registratie: Februari 2001
  • Niet online
Probeer het eens met een letter A - Z

pijltjes (control keys) werken namelijk niet met KeyPress ;)

of gebuik Form1_KeyDown of gebruik override de ProcessDialogKey (welke voor elke toets werkt)

voorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
protected override bool ProcessDialogKey(Keys keyData)
    {
      keystrokeProcessed = true;
      switch (keyData) 
      {
        case Keys.Down:
          break;
        case Keys.Up:
          caretY--;
          break;
        case Keys.Left:
          caretX--;
          break;
        case Keys.Right:
          caretX++;
          break;
        case Keys.Alt | Keys.F4:
          Application.Exit(); //uu... abrupt exit.
          break;
        default:
          keystrokeProcessed = false; // let KeyPress event handler handle this keystroke.
          break;
      this.Invalidate();
      this.Update();
      return base.ProcessDialogKey(keyData);
    }

[ Voor 98% gewijzigd door Viper® op 27-10-2006 17:53 ]


  • Depress
  • Registratie: Mei 2005
  • Laatst online: 12-02 13:20
Hij komt wel aan met de a-z. Heb nu keydown gedaan.
Ga nu even de keycodes zoeken voor KeyEventArgs->pijltjes.

Bedankt!

Edit:
@Viper
Zo heb ik het ook gedaan nu. Het werkt prima:)

[ Voor 20% gewijzigd door Depress op 27-10-2006 19:17 ]


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Ik denk dat je eens moet kijken naar het KeyPreview property van je form. Dit zorgt ervoor dat alle Key events eerst naar het Form gestuurd worden voordat ze naar het control met wat focus heeft gestuurd worden. Dit is ook precies de reden waarom je app niet bij KeyPress aankomt.

Nu met Land Rover Series 3 en Defender 90

Pagina: 1