Array
(
)

C# - detectar duas teclas ao mesmo tempo

Pedro Rafael
   - 06 nov 2010

Bom dia, estou com problemas para detectar duas teclas ao mesmo tempo, estou usando o SharpDevelop 3.2, segue o código:

isso funciona:

#Código

if(e.KeyData == Keys.Up)
{
Point x = pictureBox1.Location;
pictureBox1.Location = new Point(pictureBox1.Location.X ,pictureBox1.Location.Y -2);
}
#Código


já isso não:

#Código

void MainFormPreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
  if(e.KeyData == Keys.Right && e.KeyData == Keys.Up)
{
Point x = pictureBox1.Location;
pictureBox1.Location = new Point(pictureBox1.Location.X +2,pictureBox1.Location.Y-2);
}

Altieri Pereira
   - 15 nov 2010

Ola, creio que da forma que esta testando, não seja possível mesmo. Pois não tem como e.KeyData ser igual a Keys.Right e Keys.Up ao mesmo tempo.


Verifique o exemplo: http://proto.layer51.com/d.aspx?f=1435 e veja se ajuda.


;) até mais.

Vinicius Vieira
   - 17 nov 2010

  Então dessa forma não é possível mesmo o que você pode verificar através dos evento keydown você faz uma lista das teclas que acionaram keydown, e quando esta mesma tecla acionar o keyup você retira da lista, entendeu? assim você consegue saber quais as teclas estão apertadas provavelmente terá que usar outra thread para intepretar o que está na lista entende?

Alejandro González
   - 16 mar 2011

int pUp = 0;

int pRight = 0 ;

private void Form1_KeyUp(object sender, KeyEventArgs e)

{

if (e.KeyData == Keys.Up && pUp == 0 )

pUp=1;

if (e.KeyData == Keys.Right && pRight == 0)

pRight = 1;

if (e.KeyData != Keys.Right && e.KeyData != Keys.Up)

pRight = pUp = 0;

if (pRight == pUp && pUp == 1)

Text = "Foram pressionadas as duas teclas";

else

Text = "Nada interessante";

}