C#如何暂停程序并等待WinForm中的键盘输入

时间:2010-06-22 11:00:22

标签: c# winforms

我有一个C#2008 Winform应用程序,我正处于循环中。我正在向用户显示一个日期,我希望他们告诉我这个日期的一周中的哪一天。例如,显示6/22/2010,用户需要按t。

我坚持的是如何暂停我的应用程序并等待键盘输入?我想回应Esc,m,t,w,h,f,s,u等等。所有其他按键将被忽略。

在控制台应用程序中,它将是Console.ReadLine()。但是我如何在Winform应用程序中执行此操作?

由于

5 个答案:

答案 0 :(得分:3)

您也许可以使用模态对话框......

尝试在演示方面考虑更好的解决方案......

答案 1 :(得分:2)

产生一个请求输入的模态对话框。

答案 2 :(得分:2)

要阅读密钥,您需要回复KeyDown事件。

然后在处理程序中有类似的东西:

if (e.KeyCode == Keys.M)
{

}

虽然你可能想要一个switch语句而不是一系列ifs。

你必须考虑如何向用户呈现日期,如果它在主表单或模型对话框中(正如其他人所建议的那样)。

答案 3 :(得分:2)

你的概念错了,一个Windows程序总是在一个循环中等待。

所以你必须考虑接受什么输入和阻止什么。例如,您可以取消FormClose事件(但请让用户离开)。

要实施您的方案,请使用“状态”概念,在正确输入后,您将前进到下一个状态。

答案 4 :(得分:1)

如果在计算过程中需要一些信息(在你的情况下是循环),你可以使用回调方法来获取这些信息。

int Calculate( Func<DateTime, string> callback )
{
  var result = callback( dateTime );
}

此方法的调用者必须提供返回请求值的回调。当在表单中开始计算时,该表单可以弹出一个对话框以询问用户输入。这可能发生在回调中。

编辑:
你知道DateTime.DayOfWeek财产吗?也许你可以跳过用户对话框。