下划线充当分隔符 C# RTF Box

2024-03-29

我正在开发一个 Winforms 应用程序,并使用 RichTextBox 控件上的 Find 来查找要设置样式的特定关键字。

由于某种原因,尽管指定了 WholeWord 标志,Find 似乎仍将其中带有下划线的单词视为 2 个单独的单词(并对匹配的一半设置样式)。

函数调用是:

richTextBox1.Find("Keyword", RichTextBoxFinds.MatchCase | RichTextBoxFinds.WholeWord);

为什么会发生这种情况?我可以以某种方式覆盖它/修复它吗?


你可以,虽然有点毛茸茸的。您需要指定一个自定义断词程序 http://msdn.microsoft.com/en-us/library/windows/desktop/hh270412%28v=VS.85%29.aspx对于您的富文本框,并且您想要覆盖某些情况并使用默认处理程序。在 C++ 中,这非常简单;在 C# 中,没有那么多。这个问题 https://stackoverflow.com/questions/6359774/suppress-line-break-in-a-richtextbox-at-certain-positions描述设置;我已经更新了它以保存旧的过程来处理其他情况。

namespace q6359774
{
    class MyRichTextBox : RichTextBox
    {
        const int EM_SETWORDBREAKPROC = 0x00D0;
        const int EM_GETWORDBREAKPROC = 0x00D1;


        delegate int EditWordBreakProc(string lpch, int ichCurrent, int cch, int code);

    EditWordBreakProc oldEditWordBreakProc; 

        protected override void OnHandleCreated(EventArgs e)
        {
            base.OnHandleCreated(e);
            this.Text = "abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz";
            if (!this.DesignMode)
        {
                IntPtr oldproc;
                oldproc = SendMessage(this.Handle, EM_SETWORDBREAKPROC, IntPtr.Zero, Marshal.GetFunctionPointerForDelegate(new EditWordBreakProc(MyEditWordBreakProc)));
                oldEditWordBreakProc = Marshal.GetDelegateForFunctionPointer(oldproc, typeof(EditWordBreakProc));
            }
        }

        [DllImport("User32.DLL")]
        public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);


        int MyEditWordBreakProc(string lpch, int ichCurrent, int cch, int code)
        {
            const int WB_ISDELIMITER = 2;
            const int WB_CLASSIFY = 3;
            if (code == WB_ISDELIMITER)
            {
                if (lpch.Length == 0 || lpch == null) return 0;
                char ch = lpch[ichCurrent];
                if (ch == '_')
        {
                     return 0;
                }
                else return oldEditWordBreakProc(lpch, ichCurrent, cch, code);
            }
            else if (code == WB_CLASSIFY)
            {
                if (lpch.Length == 0 || lpch == null) return 0;
                char ch = lpch[ichCurrent];
                var vResult = Char.GetUnicodeCategory(ch);
                return (int)vResult;
            }
            else return oldEditWordBreakProc(lpch, ichCurrent, cch, code);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

下划线充当分隔符 C# RTF Box 的相关文章

随机推荐

  • Recyclerview水平扑克牌效果

    我正在尝试制作简单的纸牌游戏 我需要展示桌子上的一副纸牌水平地用户可以通过单击选择任意数量的卡片 理想情况下 当使用单击任何卡时 卡应比其他卡稍微抬高一点 另外卡片不是完全可见的 它们是部分可见的 例如this https d2gg9evh
  • PHP 计数数组中的值

    我有这样的代码 span Mali Oglasi span p p 如何计算数组内的特定值 例如我想计算有多少结果i
  • 递归赋值

    def swap aList if len aList 0 return 0 elif len aList 1 print aList 0 return aList 0 return aList 0 swap aList 2 aList a
  • 创建并使用 Babel 插件而不将其设为 npm 模块

    在我的项目中 我使用带有 require 钩子的 Babel 6 我需要加载我编写的自定义 babel 插件 但是我真的需要先使用 npm 发布我的插件 然后将插件名称包含在我的主项目中吗 babelrc 有没有办法直接加载插件代码 换句话
  • 将SQL Server 2005查询结果导出到SQL INSERT语句?

    SQL Server 2005 中有没有一种简单的方法可以将查询结果导出到 SQL INSERT 语句 我正在考虑如何使用数据库资源管理器将现有存储过程编写到新查询窗口中 我们希望将一些数据从开发数据库转移到生产数据库 我了解链接服务器 但
  • Maven 构建错误 - 无法执行目标 org.apache.maven.plugins:maven- assembly-plugin:2.5.5

    我正在尝试使用 Maven 构建项目 不幸的是我没有使用maven的经验所以我有点无助 这很可能是由 riak 子模块引起的 这是带有代码的 github 存储库 YCSB https github com LordFazole YCSB
  • 如何将网格设置为 Items 控件的模板?

    我正在尝试创建一个ItemsControl使用网格作为其ItemsPanel以这样的方式 它有两列 其中第一列宽度是该列中最宽项目的宽度 并且具有显示所有项目所需的尽可能多的行 基本上 我想要以下内容 但不知何故在一个ItemsContro
  • 使用 Rails 更新附加到 Postgresql 中的文本列

    预先感谢您对此提供的任何帮助 我有一个 Rails 模型 其中包含 postgresql 文本列 我想追加 即mycolumn mycolumn newdata 数据添加到现有列 我想要生成的 sql 如下所示 update MyOjbs
  • Akka 2:如何暂停消息处理?

    在我使用 Akka 掌握 Actor 模型的过程中 出现了很多问题 这是另一张 假设我们有一个 Actor 由于某些业务逻辑或可用资源 它必须在给定时间内停止处理消息 可能发生这种情况的情况可能是 节流 可能有一个发送电子邮件的 Actor
  • gcc 可以配置为不打印警告/错误消息中的完整路径吗?

    当 gcc 打印出警告或错误时 它会显示包含错误的文件的完整路径 是否有一个标志可以将输出缩短为仅文件名 这仅取决于您如何调用 gcc tmp c gcc Wall bad c bad c 1 warning return type def
  • 如何在 BigQuery 中通过每个用户的线性插值来填充不规则缺失的时间序列值?

    我有丢失的数据时间序列价值观不规律对于每个用户 我想使用 BigQuery 标准 SQL 通过线性插值以一定的间隔对其进行转换 name time value Jane 2020 11 14 09 01 00 3 Jane 2020 11
  • Django 无法加载模板标签

    我创建了一个templatetags我的应用程序内的文件夹和名为的文件内posts py 我写了以下代码 from django template import Library Node from advancedviews models
  • 如何检查 Jetpack Compose 中列表项的可见性

    FlatList of React Native有财产viewabilityConfigCallbackPairs您可以在其中设置 viewabilityConfig itemVisiblePercentThreshold 50 waitF
  • 从 csv 文件复制 cassandra 表

    我正在我的 Mac 带有 Oracle jdk1 7 0 55 的 Mac OS X Yosemite 上为 Cassandra Apache Spark 和 Flume 设置演示环境 该景观应作为新分析平台的概念证明 因此我需要在我的 c
  • SQL 计数(*) 性能

    我有一个包含超过 2000 万行的 SQL 表 BookChapters 它有一个聚集主键 bookChapterID 并且没有任何其他键或索引 运行以下查询需要几毫秒 if select count from BookChapters 0
  • 在 PHP 关联数组索引中使用空格是一种不好的做法吗?

    我必须使用关联数组传递一些参数 如下所示 blockGroup name products type complete 做了一些测试 我发现它有效 但这是一个不好的做法吗 是否有可能产生任何错误或意外行为 感谢您的任何建议 EDIT 1 我
  • FreeType“通用”与 c++/cx 关键字冲突

    我在将 c 和 c cx 放在一起时遇到问题 我需要使用 FreeType 库 但他们对某些变量使用 通用 名称 我还需要启用 VC 扩展 因为 WinRT 应用程序会导致名称冲突 通用是 c cx 中的关键字 1 gt freetype2
  • 如何查看eclipse“运行配置”使用的shell命令

    给定 Eclipse 中的 运行配置 我想打印出用于运行它的关联 shell 命令 例如 现在 在 Eclipse 中 如果我单击 播放 它将运行 mvn assembly directory Dmaven test skip true 我
  • 使用 SonarQube 进行多模块项目分析

    SonarQube Server 5 1 2 Sonar Runner 2 4 如提供的多模块项目 http docs sonarqube org display SONAR Analyzing with SonarQube Runner
  • 下划线充当分隔符 C# RTF Box

    我正在开发一个 Winforms 应用程序 并使用 RichTextBox 控件上的 Find 来查找要设置样式的特定关键字 由于某种原因 尽管指定了 WholeWord 标志 Find 似乎仍将其中带有下划线的单词视为 2 个单独的单词