Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当按下回车键时做某事_C# - Fatal编程技术网

C# 当按下回车键时做某事

C# 当按下回车键时做某事,c#,C#,我正在尝试在我的小游戏中实现作弊部分。所以基本上是这样的: public partial class Form1 : Form { public Form1() { InitializeComponent(); } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { KeyEventArgs e = new KeyEventArgs

我正在尝试在我的小游戏中实现作弊部分。所以基本上是这样的:

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);
    }

}
-用户在游戏过程中按回车键(或其他按钮)
-一个盒子打开了
-用户输入文本
-作弊激活

我应该把代码添加到表单加载函数中还是其他地方

我找到了一些密码,但不起作用。比如说

if ((Control.ModifierKeys & Keys.Shift) != 0)
            {
                MessageBox.Show("asd");
            }
当我点击Shift按钮时,没有任何事情发生,请尝试将设置为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的建议将不起作用,我的建议当然也不起作用。

尝试将设置为
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的建议将不起作用。

您可以处理表单的事件:

private void Form_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
      if(e.KeyCode == Keys.Enter)
      {
           // ...        
      }
}
您可以处理窗体的事件:

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

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

随附

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

在表单代码中覆盖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);
    }

}
这不需要将KeyPreview设置为true。

在表单代码中重写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);
    }

}

这并不要求将KeyPreview设置为true。

仍然没有任何事情发生。我应该从某处调用此函数吗?您需要订阅事件,
this.KeyDown+=Form\u KeyDown将其放入表单加载事件我添加了messagebox。在if语句中显示事件。我加上了这个,按键。。我的表单加载事件的代码。当我按下表单上的第一个按钮时,单击。我换班了,但还是没发生什么。我应该从某处调用此函数吗?您需要订阅事件,
this.KeyDown+=Form\u KeyDown将其放入表单加载事件我添加了messagebox。在if语句中显示事件。我加上了这个,按键。。我的表单加载事件的代码。当我按下表单上的第一个按钮时,单击。我用Shift键更改了Enter键,但仍然没有发生任何事情。我认为这是关于
WinForms
的,我想不出在
WPF
上下文中使用
键盘
类的方法。如果你有样品的话,你能给我看看吗?我错过了(winForms)。但是考虑到这一点,我打赌有一些.dll调用要容易得多。对不起,我从60年代开始就没有写过任何winforms代码(可能晚一点,但不多)。我想这是关于
winforms
的,我想不出在
WPF
上下文之外使用
键盘
类的方法。如果你有样品的话,你能给我看看吗?我错过了(winForms)。但是考虑到这一点,我打赌有一些.dll调用要容易得多。很抱歉,我从60年代开始就没有写过任何winforms代码(可能会晚一点,但不会太多)。好的,那么你必须告诉我们更多关于你的代码/设计的信息,因为它应该可以工作;-)好的,那么您必须告诉我们更多关于您的代码/设计的信息,因为它应该可以工作;-)很好的解决方法。。。但我仍然想知道@JayGatsby是如何让正常的解决方案变得没有反应的;-]很好的解决方法。。。但我仍然想知道@JayGatsby是如何让正常的解决方案变得没有反应的;-]