【问题标题】:How to record typing in C# (keyListener)如何在 C# 中记录输入(keyListener)
【发布时间】:2011-12-06 12:14:02
【问题描述】:

我想写一个简单的文字转语音程序。

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

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

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

【问题讨论】:

  • 您将使用 WinForms 还是 WPF?可能是控制台应用程序?还是网络应用程序?银光?因为答案取决于您选择的技术。
  • 您想如何播放声音?您按下的每个键都会出现声音,或者在完成输入后,单词会发音(基于单个字母)
  • 我将两者都做,但首先我会做“每个按键按下的声音”,然后我会做整个单词。但这个词不会基于单个字母。我正在做这个程序不是为了英语,这就是为什么在整个单词上做这个程序要容易得多。

标签: c# .net winforms


【解决方案1】:

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

请参考这里 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown.aspx

需要一些逻辑来判断是否输入了一个完整的单词。一个简单的想法是,当按下空格时,您可以假设一个单词已经完成。它的逻辑非常粗糙,因为用户可能输入了错误的拼写并希望按退格键并更正拼写。您可能需要为其添加延迟。

【讨论】:

    【解决方案2】:

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

    1. 创建一个 Windows 窗体并转到 [Design]。
    2. 选择它的属性(RMB=>properties),导航到事件并双击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;
                    }
            }
    }
    

    或者大量使用ifs

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

    【讨论】:

      【解决方案3】:

      创建一个包含文本框的 Windows 窗体。处理 KeyPress 事件 - 这将为您提供用户键入的实际字符。 KeyDown 和 KeyUp 帮不了你。

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

      void MyEventHandler(object sender, KeyPressEventArgs e) {
          // Do stuff depending on the value of e.KeyChar
      }
      

      【讨论】:

        【解决方案4】:
          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;
                            }
                    }
                }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-17
          • 2013-11-06
          • 2012-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多