输入键按下时做某事

时间:2014-12-31 17:35:40

标签: c#

我试图在我的小游戏中实施作弊部分。所以基本上就是这样:

- 用户在比赛期间按下输入(或其他一些按钮) - 一个盒子打开了 - 用户输入文字
-Cheat激活

我应该将代码添加到form_load函数还是其他地方?

我找到了一些代码,但它们没有用。例如

if ((Control.ModifierKeys & Keys.Shift) != 0)
            {
                MessageBox.Show("asd");
            }

当我点击Shift按钮时,会发生无意义的

4 个答案:

答案 0 :(得分:4)

您可以处理表单的KeyDown事件:

private void Form_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
      if(e.KeyCode == Keys.Enter)
      {
           // ...        
      }
}

答案 1 :(得分:1)

尝试将Form.KeyPreview Property设置为true

  

获取或设置一个值,该值指示在将事件传递给具有焦点的控件之前表单是否将接收键事件。

在设计器或构造函数中:

public Form1()
{
    InitializeComponent();
    KeyPreview = true;
}

但是我没有完整的答案我提供了完整的代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        KeyPreview = true;
        // Full syntax in case you're using some older Visual Studio.
        this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if ((Control.ModifierKeys & Keys.Shift) != 0)
        {
            MessageBox.Show("asdf");
        }
    }
}

@ Selman22的建议在没有KeyPreview的情况下无效,如果没有事件处理程序,我的建议不会有效。

答案 2 :(得分:1)

在您的Forms代码中覆盖ProcessCmdKey(),如下所示:

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        KeyEventArgs e = new KeyEventArgs(keyData);
        if (e.KeyCode == Keys.Enter)
        {
            MessageBox.Show("asd");
            return true; // optionally suppress further processing of the enter key by other controls on the form
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

}

NOT 需要将KeyPreview设置为true。

答案 3 :(得分:0)

使用Keyboard class

您不需要订阅任何事件,并且可以随时使用它,但您需要为某些UI容器类型设置Focusable = true,请阅读帮助文本。