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