在包含超链接的richtext框v5中选择文本时发生奇怪的移位

Jer*_*rry 5 c# rtf richtextbox selection winforms

当我使用RichTextBox.Select(int start,int length)函数在包含超链接的富文本框中选择文本时,当我尝试选择超链接之后的任何文本时,选择会有一些变化.

当我删除超链接时,选择正常.

编辑: 我使用RichTextBox 5(Visual Studio中的默认值是版本4)

public class RichText50W : RichTextBox
{
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    static extern IntPtr LoadLibrary(string lpFileName);
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams prams = base.CreateParams;
            if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
            {
                prams.ClassName = "RICHEDIT50W";
            }
            return prams;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

只有richtextbox 5+才会出现此问题.

这些图像显示了问题和行为的差异.

如果您尝试此操作,请确保将richtextboxes的HideSelection属性设置为"false".

选择功能显示在按钮上.

选择(10,1)

对于RTB5,应在上图中选择"文本"中的"e".

选择(40,1)

选择(46,1)

显然,RTB5会选择一些隐藏文字.

我需要它只根据可见文本进行选择.

RTB 4在使用表时有问题,所以我不想使用它.

我使用.NET 2.0

编辑:要在Visual Studio中尝试此操作,请从默认的richtextbox开始,并将其声明更改为RichText50W而不是RichTextBox

RichEdit 6也有同样的问题.

谢谢

Lar*_*ech 2

根据我自己的经验,版本“RICHEDIT50W”在与嵌入的超链接或隐藏文本(使用 rtf 代码 \\v \\v0)一起使用时会严重损坏。

\n\n

在您的 v5 框中,该Text.Length属性报告其显示的 14 个字符 \xe2\x80\x94。该TextLength属性报告 51 个字符。和属性都报告“隐藏文本”数字,但该控件不再为您提供获取隐藏文本的方法SelectionStartSelectionLength这意味着当您的富文本包含隐藏字符时,“文本”和相关的“文本选择”信息将变得不可用。

\n\n

我认为唯一的解决方案是如果存在隐藏字符或浏览市场以获得更好的富文本控件,则不要使用“RICHEDIT50W”版本。

\n

  • @Jerry 在这个话题上,事情对你来说似乎变得越来越糟糕。 (3认同)