我有RichTextBox
,我想计算KeyDown
事件中输入的文字长度。问题是资本形式的字符我必须按Shift
,这也是在长度上计算的。请参阅以下代码:
private void rtfText_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers != Keys.Shift)
{
var val = (char)e.KeyValue;
string _typed += val;
}
}
对于资本为W
的获胜等文字,_typed
的长度显示为4
,其中3
应为2
。怎么解决这个?我编写了上面的代码来克服这个问题,但由于压制3
,现在长度显示为Shift
而不是{{1}}。
答案 0 :(得分:1)
您应该直接从ritch文本框中获取TextLength属性:
var textLength = rtfText.TextLength
答案 1 :(得分:1)
只需将您的代码更改为:
private void rtfText_KeyDown(object sender, KeyEventArgs e)
{
if (!char.IsControl((char)e.KeyValue))
{
var val = (char)e.KeyValue;
string _typed += val;
}
}
这样,如果按下一个控制键,你就不会计算它或将它聚合到你的字符串中。 (PS:控制键是shift,ctrl ...)
请看此链接:http://msdn.microsoft.com/fr-fr/library/18zw7440(v=vs.95).aspx
它列出了控制字符并解释了char.IsControl
方法的确切含义
编辑:实际上有很多情况它无法正常工作。当然,您可以尝试处理每种特定情况(例如backspace
,ctrl+V
...),但最简单的方法是使用TextLenght
属性和TextChanged
事件