【问题标题】:Taking user input in a form在表单中获取用户输入
【发布时间】:2014-04-24 18:15:33
【问题描述】:

我一直在将我制作的控制台迷宫游戏转换为 Winform,但在尝试获取用户输入时出现错误。当我制作我使用的主机游戏时

Console.Read();
ConsoleKeyInfo press = Console.ReadKey(true);    
press.Key == ConsoleKey.DownArrow;

但是,由于它现在是一个 winform 应用程序,而不是一个控制台应用程序,所以我无法通过这种方式获取输入,因此我没有这样做,而是尝试通过创建表单实例来获取输入,然后创建一个keyeventhandler,就像这样

public static gameBorder FormInstance;
public event KeyEventHandler KeyDown;

并在比较语句中的另一个类中调用它,如下所示:

if(gameBorder.FormInstance.KeyPress += Keys.W )

但这会引发错误:

无法将类型 system.windows.forms.keys 隐式转换为 system.windows.form.keypresseventhandler

我认为这是因为我试图将键事件处理程序的实例与按下的键进行比较,但我不确定。任何指导将不胜感激。

【问题讨论】:

  • if(gameBorder.FormInstance.KeyPress += Keys.W ) 不是“比较陈述”。您不是“试图比较”事物,+= 是一个加法赋值运算符。请参阅msdn.microsoft.com/en-us/library/sa7629ew.aspx 以了解开始。在提出问题之前,您是否尝试过阅读最基本的内容?
  • @KonradMorawski 我很抱歉。
  • 没有必要道歉 :) 如果我的评论居高临下,我很抱歉。我还是觉得先学点理论比较好,不然学起来会比较慢

标签: c# winforms


【解决方案1】:

这个:

gameBorder.FormInstance.KeyPress +=

是您订阅事件处理程序的方式。 Keys.W 不是事件处理程序。

Visual Studio 将为您提供一个巨大的帮助,当您键入 += 时,它会为您添加一个新的事件处理程序。继续让它这样做,然后你可以测试在它生成的函数中按下了什么键(使用KeyPressEventArgs)。

分配事件处理程序:

gameBorder.FormInstance.KeyPress += HandleKeyPress;

处理事件:

private void HandleKeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 'W')
    {
    }
}

【讨论】:

  • 我建议将Form1_KeyPress添加到第一个代码块中以使其清晰
  • 谢谢@Jon B。我已经为这个概念苦苦挣扎了好几个小时。我现在可以编辑我的代码,以便在按下 W 时设置一个本地变量,我可以将其用作参数。
猜你喜欢
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2018-06-12
  • 1970-01-01
相关资源
最近更新 更多