0

我有RichTextBox并且我想计算在KeyDown事件中输入的文本的长度。问题是我必须按大写形式的字符,Shift这也是在长度中计算的。请参阅以下代码:

 private void rtfText_KeyDown(object sender, KeyEventArgs e)
 {
    if (e.Modifiers != Keys.Shift)
        {
            var val = (char)e.KeyValue;
            string  _typed += val;                           
        }

}

对于Win with capitalW之类的文本,长度_typed显示为4where as it should be 3。如何解决这个问题?我编写了上面的代码来克服这个问题,但现在长度显示为2而不是3因为抑制Shift.

4

2 回答 2

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作用

编辑:实际上有很多情况下它不起作用。当然,您可以尝试处理每种特定情况(例如backspacectrl+V...),但最简单的方法是使用TextLenght属性和TextChanged事件

于 2013-08-09T16:49:46.713 回答
1

您应该直接从 ritch 文本框中获取 TextLength 属性:

var textLength = rtfText.TextLength
于 2013-08-09T16:40:02.290 回答