gpt4 book ai didi

c# - 在 Form 以外的类上接收和读出 KeyEventArgs 事件

转载 作者:太空宇宙 更新时间:2023-11-03 12:04:42 25 4
gpt4 key购买 nike

我目前正在开发一款 WinForms 项目小游戏。游戏场由玩家(一个单独的类)可以继续移动的瓷砖网格构建而成。我希望玩家使用箭头键移动并为它设置了一个事件处理程序,但它似乎从未被调用过。

(最小化)播放器类,它为 KeyEventArgs 实现 System.Windows.Forms 包:

public class Player : MovableObject
{
public Player(Playtile position) : base(position)
{
EntityColor = ElementColors.PlayerColor;
PostConstructor(position);
}

/// <summary>
/// Reads keypress via eventhandler KeyEventArgs (key down).
/// </summary>
private void ReadKeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
// move up.
break;
case Keys.Right:
// move right.
break;
case Keys.Down:
// move down.
break;
case Keys.Left:
// move left.
break;
}
}
}

目前,ReadKeyDown 永远不会被调用。我如何实际将 KeyEventDown 事件分配/绑定(bind)到播放器,以便它实际上在按下按键时调用该方法?

KeyEventArgs in C#似乎只是说 this.KeyDown += ReadKeyDown;,但它没有将 KeyDown 识别为任何东西,也没有给我可能丢失的程序集引用。

最佳答案

KeyDownControl 的成员,因此在您的情况下,您可以在 Form 中订阅该事件。

喜欢以下内容:

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
textBox1.KeyDown += TextBox1_KeyDown;
}

private void TextBox1_KeyDown(object sender, KeyEventArgs e)
{
}
}

完整示例参见官方文档:

https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.keydown?view=netframework-4.7.2

现在您可以做的是在收到此类事件后调用目标类中的方法:

public class MyClass
{
public void OnKeyDown(KeyEventArgs e)
{
// ...
}
}

public partial class Form2 : Form
{
MyClass _instance = new MyClass();

public Form2()
{
InitializeComponent();
textBox1.KeyDown += TextBox1_KeyDown;
}

private void TextBox1_KeyDown(object sender, KeyEventArgs e)
{
_instance.OnKeyDown(e);
}
}

关于c# - 在 Form 以外的类上接收和读出 KeyEventArgs 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55642922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com