我在从Richtextbox
派生的控件中输入了以下文本“世界是{beautful}”。
我的主要目的是为beautful这个词创建一个链接。我可以使用CFE_LINK创建此内容,但是当我选择文本时就是这样。
当我使用Select(4,9)时,4到9范围内的文字会被删除。
有人可以帮我解决我错过的问题吗?
代码:
我正在创建一个从Richtextbox派生的用户控件。
我在下面给出了确切的代码;我没有做任何颜色变化。我认为Select命令默认将所选文本设置为蓝色。
protected override void OnKeyPress(KeyPressEventArgs e)
{
String keypressed = e.KeyChar.ToString();
if(keypressed == "}")
Select(4,9)
base.OnKeyPress(e);
}
答案 0 :(得分:2)
我怀疑当按下'}'键时,代码会在字符发送到文本框之前运行。
因此,您选择文本,然后将'}'字符发送到文本框,覆盖选择。
编辑:是的,转载它。
我不确定如何解决它。也许最好实现OnTextChanged
..你可以扫描整个文本框中的未链接{大括号内的单词}。如果文本很大,它可能会更慢,但它会自动处理复制和粘贴等事情。
答案 1 :(得分:2)
起初我开始搞乱这个时,我也很困惑。但是它击中了我,很可能你正在按下的键被发送到文本框以在KeyUp渲染。果然,当我将代码更改为此时,它可以工作:
protected override void OnKeyUp(KeyEventArgs e)
{
base.OnKeyUp(e);
if (e.KeyCode == Keys.Oem6)
{
Select(4, 9);
}
}
答案 2 :(得分:0)
我投票支持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 });
}
}
答案 3 :(得分:0)
根据Blorgbeard的回答,您首先选择文字,然后在文本框中输入“}
”,替换您的选择。也许您想要的是首先输入“}
”然后然后进行选择。
protected override void OnKeyPress(KeyPressEventArgs e)
{
// type "}" into textbox
base.OnKeyPress(e);
String keypressed = e.KeyChar.ToString();
if(keypressed == "}")
Select(4,9)
}