C# 在C中的RichTexbox中选择文本将删除该文本
我在从Richtextbox派生的控件中键入了以下文本 世界是美丽的 我的主要目的是为“美丽”这个词创建一个链接。我可以使用CFE_链接创建这个,但那是我选择文本的时候 当我使用Select 4,9时,4到9范围内的文本将被删除 有人能帮我解决我遗漏的问题吗 代码: 我正在创建一个从Richtextbox派生的用户控件 我在下面给出确切的代码;我没有做任何颜色的改变。我认为Select命令默认情况下会将所选文本设置为蓝色C# 在C中的RichTexbox中选择文本将删除该文本,c#,richtextbox,C#,Richtextbox,我在从Richtextbox派生的控件中键入了以下文本 世界是美丽的 我的主要目的是为“美丽”这个词创建一个链接。我可以使用CFE_链接创建这个,但那是我选择文本的时候 当我使用Select 4,9时,4到9范围内的文本将被删除 有人能帮我解决我遗漏的问题吗 代码: 我正在创建一个从Richtextbox派生的用户控件 我在下面给出确切的代码;我没有做任何颜色的改变。我认为Select命令默认情况下会将所选文本设置为蓝色 protected override void OnKeyPress(Ke
protected override void OnKeyPress(KeyPressEventArgs e)
{
String keypressed = e.KeyChar.ToString();
if(keypressed == "}")
Select(4,9)
base.OnKeyPress(e);
}
我怀疑当按下“}”键时,代码会在字符发送到文本框之前运行 因此,选择文本,然后将“}”字符发送到文本框,覆盖所选内容
protected override void OnKeyPress(KeyPressEventArgs e)
{
// type "}" into textbox
base.OnKeyPress(e);
String keypressed = e.KeyChar.ToString();
if(keypressed == "}")
Select(4,9)
}
编辑:是的,复制了它
我不知道该如何解决这个问题。也许实现OnTextChanged会更好。。您可以扫描整个文本框以查找未链接的{大括号内的单词}。如果文本较大,则速度可能较慢,但它会自动处理复制和粘贴等操作。我怀疑当按下“}”键时,代码会在字符发送到文本框之前运行 因此,选择文本,然后将“}”字符发送到文本框,覆盖所选内容
protected override void OnKeyPress(KeyPressEventArgs e)
{
// type "}" into textbox
base.OnKeyPress(e);
String keypressed = e.KeyChar.ToString();
if(keypressed == "}")
Select(4,9)
}
编辑:是的,复制了它
我不知道该如何解决这个问题。也许实现OnTextChanged会更好。。您可以扫描整个文本框以查找未链接的{大括号内的单词}。如果文本很大,速度可能会慢一些,但它会自动处理复制和粘贴之类的事情。起初,当我开始处理这个问题时,我也感到困惑。但我突然想到,很有可能你按下的键被发送到文本框,在KeyUp上进行渲染。果然,当我将您的代码更改为此时,它起了作用:
protected override void OnKeyUp(KeyEventArgs e)
{
base.OnKeyUp(e);
if (e.KeyCode == Keys.Oem6)
{
Select(4, 9);
}
}
起初,当我开始处理这个问题时,我也感到困惑。但我突然想到,很有可能你按下的键被发送到文本框,在KeyUp上进行渲染。果然,当我将您的代码更改为此时,它起了作用:
protected override void OnKeyUp(KeyEventArgs e)
{
base.OnKeyUp(e);
if (e.KeyCode == Keys.Oem6)
{
Select(4, 9);
}
}
我投票支持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 });
}
}
我投票支持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 });
}
}
根据的答案,您首先选择文本,然后在文本框中键入},替换您的选择。也许您需要先键入},然后进行选择
protected override void OnKeyPress(KeyPressEventArgs e)
{
// type "}" into textbox
base.OnKeyPress(e);
String keypressed = e.KeyChar.ToString();
if(keypressed == "}")
Select(4,9)
}
根据的答案,您首先选择文本,然后在文本框中键入},替换您的选择。也许您需要先键入},然后进行选择
protected override void OnKeyPress(KeyPressEventArgs e)
{
// type "}" into textbox
base.OnKeyPress(e);
String keypressed = e.KeyChar.ToString();
if(keypressed == "}")
Select(4,9)
}
您使用的是WinForms还是WPF?这里的代码片段将非常有用。另外,请发布一些代码,以便我们能够准确地看到您的操作。无法复制;文本被选中,但请注意,除非rtf是活动控件,否则它可能不会显示高亮显示颜色是否与文本颜色相同?这将使文本看起来好像不存在,尽管它仍然存在。您使用的是WinForms还是WPF?这里的代码片段将非常有帮助。另外,请注意发布一些代码,以便我们可以确切地看到您的操作。无法复制;文本被选中,但请注意,除非rtf是活动控件,否则它可能不会显示高亮显示颜色是否与文本颜色相同?这会使文本看起来好像不存在,尽管它仍然存在。这看起来很好。事实上,我要感谢大家的意见。知道如何获取我键入的字符的索引吗。任何比从Charindex获取职位更好的选择;在本例中,我可以有许多{},需要为所有这些维护一个列表。这看起来不错。事实上,我要感谢大家的意见。知道如何获取我键入的字符的索引吗。任何比从Charindex获取职位更好的选择;在本例中,我可以有许多{},并且需要维护所有这些的列表。