Richtextbox禁用不可呈现的字符

时间:2014-07-27 16:31:39

标签: c# winforms richtextbox

我有一个带有RichTextBox的C#WinForms应用。此文本框将包含随机生成的所有Unicode字符的字符串(或至少尽可能多的字符串)。问题是,它无法显示一些字符。当我使用断点等检查VS时,字符是正确的,所以这只是一个显示问题 - 见图。是否有任何方法可以使文本框正确显示这些字符,或者在代码中过滤这些字符甚至不生成?

这是我用于生成的代码(现在生成所有代码,稍后它将是一个随机数)

        string key = "";
        for (int i = 1; i <= length; i++)
        {
                key += (char)i;    
        }

以下是图片在文本框中的外观: enter image description here

1 个答案:

答案 0 :(得分:2)

这些空方格实际上是control(和其他)字符,它们无法以有意义的方式显示,如字母和数字,例如null字符,制表符,&#34 ;传输结束&#34;等...

您可以在Char类中使用一些方法将结果限制为printable characters

string key = "";
for (int i = 1; i <= length; i++)
{
    var c = (char)i;
    if (Char.IsPunctuation(c) || Char.IsLetterOrDigit(c))
        key += c;
}

它并不完美。仍然有一些不可打印的角色,但远远低于你的屏幕截图。

我可能会尝试避免所有这些字符串连接。以下将创建一个字符数组,然后只创建一个字符串,而不是创建"length"个字符串。

var key = new string(Enumerable.Range(1, length)
                               .Select(i => (char)i)
                               .Where(c => Char.IsPunctuation(c)
                                           || Char.IsLetterOrDigit(c))
                               .ToArray());