none
Como movimentar componentes utilizando as 'Arrow Keys' do teclado? RRS feed

  • Pergunta

  • Olá Experts,

    Gostaria de saber como movimentar componentes utilizando as 'Arrow Keys' (cima, baixo, esquerda, direita) do teclado.
    Eu estou desenvolvendo um jogo parecido com aqueles puzzle, quebra-cabeça, que fica faltando uma peça e o jogador tem que movimentar as peças para montar a figura de forma correta.
    Eu não estou conseguindo movimentar os componentes através das 'Arrow Keys', eu já consegui movimentá-los através do clique do mouse, mas acho que pelo teclado seria mais prático.


    Obrigado pela ajuda!
    sexta-feira, 4 de dezembro de 2009 02:00

Todas as Respostas

  • Olá Pedro,

    O seu formulário (classe Form) tem os eventos KeyDown, KeyPress, e KeyUp, que podem ser disparados toda vez que uma tecla é pressionada quando este formulário está ativo. Para isso, basta você habilitar a propriedade KeyPreview do seu formulário (true).

    A partir daí, você pode, por exemplo, utilizar o evento KeyDown para filtrar as teclas pressionadas e movimentar o(s) controle(s) que você quiser, de acordo com a direção... Basta alterar as propriedades Top e Left do controle, para mudar sua posição.

    Algo mais ou menos assim:

    private void SeuFormulario_KeyDown(object sender, KeyEventArgs e)
    {
        // Verifica qual tecla foi pressionada...
        switch (e.KeyCode)
        {
            // Seta para cima?
            case Keys.Up:
                {
                    // Sim... Move o controle 100 pixels para cima
                    this.seuControle.Top -= 100;
                    e.Handled = true;
                    break;
                }
    
            // Seta para baixo?
            case Keys.Down:
                {
                    // Sim... Move o controle 100 pixels para baixo
                    this.seuControle.Top += 100;
                    e.Handled = true;
                    break;
                }
    
            // Seta para a esquerda?
            case Keys.Left:
                {
                    // Sim... Move o controle 100 pixels para a esquerda
                    this.seuControle.Left -= 100;
                    e.Handled = true;
                    break;
                }
    
            // Seta para a direita?
            case Keys.Right:
                {
                    // Sim... Move o controle 100 pixels para a direita
                    this.seuControle.Left += 100;
                    e.Handled = true;
                    break;
                }
        }
    }


    De qualquer forma, o Windows Forms não é o framework mais indicado para desenvolver jogos... Sugiro que dê uma olhada no XNA Framework, que é específico para isso.

    XNA Framework
    http://www.xna.com

    Abraços,
    Caio Proiete


    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://www.caioproiete.com

    domingo, 31 de janeiro de 2010 17:38
    Moderador