C# 获取我在进程上编写的字符的unicode

C# 获取我在进程上编写的字符的unicode,c#,C#,我有窗体窗体 我想捕获已写入的特定字符(unicode) 我想只允许用一种语言写 例如,我想在我的程序中只允许使用英语和希伯来语 我怎么能做到?当我写了其他东西时,我如何处理 我知道那里 按键 OnKeyDown 但我只能处理英文字符 我如何通过unicode或其他方式为任何语言实现这一点 提前感谢您可以使用类似的正则表达式对输入的文本进行简单验证 RegexOptions options = RegexOptions.None; Regex regex = new Regex(@"[^a-zA

我有窗体窗体

我想捕获已写入的特定字符(unicode)

我想只允许用一种语言写

例如,我想在我的程序中只允许使用英语和希伯来语

我怎么能做到?当我写了其他东西时,我如何处理

我知道那里

按键

OnKeyDown

但我只能处理英文字符

我如何通过unicode或其他方式为任何语言实现这一点


提前感谢

您可以使用类似的正则表达式对输入的文本进行简单验证

RegexOptions options = RegexOptions.None;
Regex regex = new Regex(@"[^a-zA-Z]+", options);     
tempo = regex.Replace(tempo, @" ");

并在文本更改事件中捕获它

您可以使用
按键
检查字符的范围。例如,您可以检查范围表

然后代码变得简单(这都是未经测试的):

你也可以使用正则表达式,但老实说,我从来没有做过任何非拉丁unicode正则表达式,所以我不能帮你

PS:由于我发布的
TextChanged
事件在有任何不允许的字符时会重建整个字符串(如果字符串足够长,这可能会变慢),因此除了
KeyPress
处理之外,我还需要这个


PS2:由于字符串在返回时是正确的,不会被修改,因此防止再入并不是真正必要的,但是我们避免了
Any()
检查(它会在字符串的每个字符上迭代,如果字符串很长,可能会很慢)

我看不出这是如何回答我所要寻找的问题的
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    var unicodeValue = (int)e.KeyChar;
    if(unicodeValue >= 0 && unicodeValue <= 0x024F) // it's latin
      return;
    if(unicodeValue >= 0x0590 && unicodeValue <= 0x05FF) // it's hebrew
      return;
    // otherwise, don't allow it
    e.Handled = true;
}
private bool IsCharAllowed(char c)
{
    var unicodeValue = (int)c;
    if(unicodeValue >= 0 && unicodeValue <= 0x024F) // it's latin
      return true;
    if(unicodeValue >= 0x0590 && unicodeValue <= 0x05FF) // it's hebrew
      return true;
    // otherwise, don't allow it
    return false;
}

private bool _parsingText = false;
private void textBox1_TextChanged(object sender, EventArgs e)
{
    // if we changed the text from within this event, don't do anything
    if(_parsingText) return;

    var textBox = sender as TextBox;
    if(textBox == null) return;

    // if the string contains any not allowed characters
    if(textBox.Text.Any(x => !IsCharAllowed(x))
    {        
      // make sure we don't reenter this when changing the textbox's text
      _parsingText = true;
      // create a new string with only the allowed chars
      textBox.Text = new string(textBox.Text.Where(IsCharAllowed).ToArray());         
      _parsingText = false;
    }
}