C# 如何在C中生成按键窗体事件
我试图在窗体上创建一个KeyPress事件,但在这一行中,我在MainWindow中遇到了一个错误。KeyPress=new KeyPress Events ArgsForm_KeyPress;,我读了微软关于C语言事件的文档,但我不明白 像Java中那样的侦听器是否存在于C中 我的代码: 课堂实践活动 { 静态环[]args { 表单主窗口=新表单; 文本=练习; MainWindow.MaximizeBox=false; MainWindow.ebox=假; MainWindow.FormBorderStyle=FormBorderStyle.FixedSingle; MainWindow.StartPosition=FormStartPosition.CenterScreen; 主窗口尺寸=新尺寸1000700; MainWindow.KeyPreview=true; MainWindow.KeyPress=新按键事件参数窗体按键; MainWindow.ShowDialog; } 私有无效表单\按键对象发送者,System.Windows.Forms.KeyEventArgs e { ife.KeyCode==Keys.A{ MessageBox.show您按下了A键。; } } }C# 如何在C中生成按键窗体事件,c#,keyboard-events,C#,Keyboard Events,我试图在窗体上创建一个KeyPress事件,但在这一行中,我在MainWindow中遇到了一个错误。KeyPress=new KeyPress Events ArgsForm_KeyPress;,我读了微软关于C语言事件的文档,但我不明白 像Java中那样的侦听器是否存在于C中 我的代码: 课堂实践活动 { 静态环[]args { 表单主窗口=新表单; 文本=练习; MainWindow.MaximizeBox=false; MainWindow.ebox=假; MainWindow.FormB
主方法是静态的,而事件处理程序不是。您需要为它提供一个对象引用,这就是错误消息试图说的。另一个错误是,您正在分配而不是附加处理程序,请为此使用+=运算符 具体来说,更改这一行: MainWindow.KeyPress=新按键事件参数窗体按键 将来
您的代码中有几个错误 MainWindow.KeyPress=新按键事件参数窗体按键 1 KeyPress具有KeyPressEventHandler类型。不是按键事件参数。在名为…EventArgs的C类中,EventArgs通常用作包含有关引发事件的数据的特殊对象,它们从EventArgs系统类继承。称为…EventHandler的类通常为委托和事件定义包装器 2所以按键是事件。如果要订阅此事件,应使用+=运算符。要指定为处理程序的方法应具有签名voidobject,KeyPressEventArgs。事件的典型签名是voidobject,…EventArgs 私有无效表单\按键对象发送者,System.Windows.Forms.KeyEventArgs e 3正如我所说,此方法的签名KeyPressEventArgs而不是keypeventargs是错误的 它应该是静态的。不能在静态方法中使用非静态类成员 因此,您的代码应该如下所示:
class PracticeEvent
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
Form MainWindow = new Form();
MainWindow.Text = "Practice";
MainWindow.MaximizeBox = false;
MainWindow.MinimizeBox = false;
MainWindow.FormBorderStyle = FormBorderStyle.FixedSingle;
MainWindow.StartPosition = FormStartPosition.CenterScreen;
MainWindow.Size = new Size(1000, 700);
MainWindow.KeyPreview = true;
MainWindow.KeyPress += Form_KeyPress;
MainWindow.ShowDialog();
}
private static void Form_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.KeyChar == 'a')
{
MessageBox.Show("You pressed the A key.");
}
}
}
在C中使用监听器不是一个好的实践,但是一些框架使用它。通常使用事件和回调
还有我最后的建议。您可能想使用KeyDown事件?按键用于处理字符输入。如果出现错误,请将其粘贴到问题中。如果你想澄清一个想法,你需要解释什么部分没有意义。否则,你只会得到你读到的和不理解的东西的重写。两个bug,使用+=订阅一个事件。我的坏!缺少该位。它仍然是错误的,委托类型是KeyEventHandler。最好推荐语法sugar版本:MainWindow.KeyPress+=instance.Form_KeyPress;还有另一个。这就是我在答案中即兴编写代码时得到的结果。它很有效!,非常感谢。我将在microsoft文档中阅读有关EventArgs和EventHandler的更多信息。
class PracticeEvent
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
Form MainWindow = new Form();
MainWindow.Text = "Practice";
MainWindow.MaximizeBox = false;
MainWindow.MinimizeBox = false;
MainWindow.FormBorderStyle = FormBorderStyle.FixedSingle;
MainWindow.StartPosition = FormStartPosition.CenterScreen;
MainWindow.Size = new Size(1000, 700);
MainWindow.KeyPreview = true;
MainWindow.KeyPress += Form_KeyPress;
MainWindow.ShowDialog();
}
private static void Form_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.KeyChar == 'a')
{
MessageBox.Show("You pressed the A key.");
}
}
}