如何用C#(keyListener)记录输入

我想写一个简单的文本到语音程序。

首先,我想让程序只播放书面符号。 例如,如果我输入’a’,我希望程序说’a’(我已经记录了所有这些),所以当我输入一个单词时,它应拼写它。

但是,我是C#和.Net的初学者,而不是如何使程序理解我输入的文本。 例如,在java中我听说有一个keyListener类,但我不知道应该使用哪个类。 我查看了MSDN但找不到它。

我应该使用哪个类或函数来收听键入的键?

我想你打算使用Windows Forms来实现这一目标。 解决方案非常简单。 这些事件包括MouseDown,MouseUp,MouseMove,MouseEnter,MouseLeave,MouseHover,KeyPress,KeyDown和KeyUp。 每个控件都暴露了这些事件。 你只需要订阅它。

请参阅此http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown.aspx

找到一个完整的单词是否被输入会有一些逻辑。 一个简单的灵魂就是,当按下空格时,你可以假设一个单词已经完成。 它非常粗糙的逻辑,因为用户可能输入了错误的拼写并希望命中退格并纠正拼写。 您可能希望为其添加滞后。

如果你像其他C#开发人员一样使用Visual Studio,这里是一个更详细的代码示例:

  1. 创建一个Windows窗体并转到[设计]。
  2. 选择其属性(RMB => properties),导航到Events并在KeyDown上双击LMB
  3. VS将为您创建并绑定事件
  4. 处理KeyEventArgs取决于其值。

例:

 private void NewDialog_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyData) { case Keys.A: { MethodToOutputSound(AEnum); break; } case Keys.B: { MethodToOutputSound(BEnum); break; } case Keys.F11: { DifferentMethod(); break; } case Keys.Escape: { this.Close(); break; } default: { break; } } } 

或者使用很多if

  private void NewDialog_KeyDown(object sender, KeyEventArgs e) { if(e.KeyData == Keys.A) { MethodToOutputSound(AEnum); } if(e.KeyData == Keys.B) { MethodToOutputSound(BEnum); } ... } 

创建一个带有TextBox的Windows窗体。 处理KeyPress事件 – 它将为您提供用户键入的实际字符。 KeyDown和KeyUp对你没有帮助。

您需要检查KeyChar属性。 像这样:

 void MyEventHandler(object sender, KeyPressEventArgs e) { // Do stuff depending on the value of e.KeyChar } 
  private void button1_Click_1(object sender, EventArgs e) { string word = textBox1.Text; foreach (char i in word) { switch (i) { case 'a': case 'A': { // play sound a break; } default: { // play no sound break; } } } }