c# - 在包含超链接的富文本框 v5 中选择文本时出现奇怪的偏移

标签 c# winforms richtextbox selection rtf

当我使用 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;
        }
    }
}

该问题仅在 richtextbox 5+ 时出现。

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

如果您尝试这样做,请确保将 richtextboxes 的 HideSelection 属性设置为“false”。

选择功能显示在按钮上。

Select (10, 1)

对于RTB5,应在上图中选择“文本”中的'e'。

Select (40, 1)

Select (46, 1)

显然 RTB5 选择了一些隐藏文本。

我需要它仅根据可见文本进行选择。

RTB 4 在使用表格时出现问题,所以我不想使用它。

我使用.NET 2.0

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

RichEdit 6 也有同样的问题。

谢谢

最佳答案

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

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

我认为唯一的解决办法是如果有隐藏字符或者浏览市场寻找更好的富文本控件,就不要使用“RICHEDIT50W”版本。

关于c# - 在包含超链接的富文本框 v5 中选择文本时出现奇怪的偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13039967/

相关文章:

vb.net - 检查是否按下了 DELETE 键?

c# - 如何使 DataGridVewLinkColumn 与 DataGridView 的其余部分一起排序

c# - 如何在 C# 中将富文本框中的某些文本加粗

c# - 调用 IdentityServer4 生成 System.NullReferenceException : Object reference not set to an instance of an object

c# - 将 int 列表作为参数传递给 Web 用户控件

c# - 如何获取在 XAML 中定义的 CollectionView

c# - 如何在 ASP.NET 中获取准确的总访客数

c# - Winforms 方法/事件过滤器属性

c# - 在 RichTextBox 中添加软回车

c# - RichTextBox 替换 Winforms .NET2.0+