在.Net Windows窗体中突出显示部分TextBox文本

时间:2011-04-16 15:20:25

标签: winforms unicode richtextbox highlighting

要求

我正在使用Vistual Studio 2005.我需要Textbox

  • 应该支持日语。用户应该能够在文本框中粘贴日文文本。
  • 文本框中的文字应始终为粗体
  • 用户输入时,100个字符后的文字应以黄色突出显示。
  • 文本框不应允许任何其他格式化文本。

我尝试过的解决方案

  1. 将FontStyle设置为粗体的普通文本框 问题:我可以粘贴日文文字,文字始终保持粗体。唯一的问题是文本框不支持将文本突出显示为用户类型。

  2. RichTextBox:突出显示TextChanged事件处理程序中的文本。

    handler = new System.EventHandler(richTextBox1_TextChanged);
    
    private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        this.richTextBox1.TextChanged -= this.handler;
        int index = richTextBox1.SelectionStart;
    
        richTextBox1.Select(0, richTextBox1.Text.Length);
        richTextBox1.SelectionBackColor = Color.White;
        richTextBox1.SelectionLength = 0;
    
        if (richTextBox1.Text.Length > 100)
        {
            richTextBox1.Select(100, richTextBox1.Text.Length);
            richTextBox1.SelectionBackColor = Color.Yellow;
            richTextBox1.SelectionLength = 0;
        }
    
        richTextBox1.SelectionStart = index;
        this.richTextBox1.TextChanged += this.handler;
    }
    

    Highthing工作正常。但是有以下问题

    • 当我将日文文本粘贴到richtextbox时,它会显示为Squre框。但是如果我以编程方式分配相同的日语文本,它会正确显示。即使在普通文本框中,粘贴的文本也会正确显示。所以不确定richtextbox有什么问题。

    • 我无法禁用richtextbox的格式。例如如果我复制一些带有超链接的html文本并粘贴在richtextbox中,我会看到超链接。我的要求是说除了BOLD之外不允许任何格式化。

  3. 我想使用Windows窗体控件来实现此功能。第三方控制将是我的最后选择。

    有人可以帮忙吗?

    提前致谢!

    〜Sambha

1 个答案:

答案 0 :(得分:0)

我有一个解决方案,但不确定这是否是有效的方法,如果它会导致一些其他问题。

解决方案:从RichTextBox和ovverride KeyDown事件创建子类。检查是否按下了Ctrol + V或Shift + Inst键,使用DataFormats.UnicodeText调用paste方法。

class MyRichTextBox : RichTextBox
{

protected override void OnKeyDown(KeyEventArgs e)
{
    switch (e.KeyData)
    {
        case (Keys.Shift | Keys.Insert): 
        case (Keys.Control | Keys.V):

            this.Paste(DataFormats.GetFormat(DataFormats.UnicodeText));
            e.SuppressKeyPress = true;

            return;
    }

    base.OnKeyDown(e);
}

}