代码之家  ›  专栏  ›  技术社区  ›  Sujay Ghosh

在C#中的RichTexbox中选择文本将删除文本

  •  1
  • Sujay Ghosh  · 技术社区  · 17 年前

    我在从Richtextbox派生的控件中键入了以下文本

    “世界是美丽的”。

    我的主要目的是为“美丽”这个词创建一个链接。我可以使用CFE_链接创建这个,但那是我选择文本的时候。

    有人能帮我解决我遗漏的问题吗?

    代码:

    我正在创建一个从Richtextbox派生的用户控件。

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
       String keypressed =  e.KeyChar.ToString();
       if(keypressed == "}")
          Select(4,9)        
       base.OnKeyPress(e);
    }
    
    4 回复  |  直到 17 年前
        1
  •  2
  •   BFree    17 年前

    起初,当我开始处理这个问题时,我也感到困惑。但我突然想到,很有可能你按下的键被发送到文本框,在KeyUp上进行渲染。果然,当我将您的代码更改为此时,它起了作用:

        protected override void OnKeyUp(KeyEventArgs e)
        {
            base.OnKeyUp(e);
            if (e.KeyCode == Keys.Oem6)
            {
               Select(4, 9);
            }
    
        }
    
        2
  •  2
  •   Blorgbeard    17 年前

    我怀疑当按下“}”键时,代码会在字符发送到文本框之前运行。

    编辑:

    我不知道该如何解决这个问题。也许实施这项计划会更好 OnTextChanged 相反您可以扫描整个文本框以查找未链接的{大括号内的单词}。如果文本较大,速度可能会较慢,但它会自动处理复制和粘贴之类的操作。

        3
  •  0
  •   Crispy    17 年前

    我投票支持BFree的答案,但如果出于某种原因必须使用OnKeyPress方法,则可以调用select方法,因此它会在事件完成后发生。

        protected delegate void SelectAfterKeyPress(int start, int length);
    
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            base.OnKeyPress(e);
            String keypressed = e.KeyChar.ToString();
            if (keypressed == "}")
            {
                this.BeginInvoke(new SelectAfterKeyPress(Select), new object[] { 4, 9 });
            }
        }
    
        4
  •  0
  •   Community Mohan Dere    9 年前

    Blorgbeard } 在文本框中键入,替换您的选择。您可能需要键入 } “首先 然后 做出选择。

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
       // type "}" into textbox
       base.OnKeyPress(e);
    
       String keypressed =  e.KeyChar.ToString();
    
       if(keypressed == "}")
          Select(4,9)        
    }