如何用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,这里是一个更详细的代码示例:
- 创建一个Windows窗体并转到[设计]。
- 选择其属性(RMB => properties),导航到Events并在
KeyDown
上双击LMB - VS将为您创建并绑定事件
- 处理
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; } } } }