如何以编程方式选择网络浏览器控件中的文本? C#

2024-01-11

问题是这样的: 我想让我的程序的用户能够在 webBrowser 控件中搜索给定的关键字(标准 Ctrl+ F)。我可以毫无问题地在文档中找到关键字并使用跨度和replace()函数突出显示所有实例。我am无法获得我想要使用的“查找下一个”功能。当用户单击“查找下一个”时,我希望文档滚动到下一个实例。如果我能得到一个边界框,我就可以使用导航功能。我使用以下代码在富文本框中使用相同的功能

                //Select the found text
                this.richTextBox.Select(matches[currentMatch], text.Length);
                //Scroll to the found text
                this.richTextBox.ScrollToCaret();
                //Focus so the highlighting shows up
                this.richTextBox.Focus();

任何人都可以提供一种方法来让它在网络浏览器中工作吗?


我在具有嵌入式 Web 浏览器控件的 WinForms 应用程序中实现了搜索功能。它有一个单独的文本框,用于输入搜索字符串和一个“查找”按钮。如果搜索字符串自上次搜索以来发生了变化,则单击按钮意味着常规查找,如果没有,则意味着“再次查找”。这是按钮处理程序:

private IHTMLTxtRange m_lastRange;
private AxWebBrowser m_browser;

private void OnSearch(object sender, EventArgs e) {

    if (Body != null) {

        IHTMLTxtRange range = Body.createTextRange();

        if (! m_fTextIsNew) {

            m_lastRange.moveStart("word", 1);
            m_lastRange.setEndPoint("EndToEnd", range);
            range = m_lastRange;
        }

        if (range.findText(m_txtSearch.Text, 0, 0)) {

            try {
                range.select();

                m_lastRange = range;

                m_fTextIsNew = false;
            } catch (COMException) {

                // don't know what to do
            }
        }
    }
}

private DispHTMLDocument Document {
    get {
        try {
            if (m_browser.Document != null) {
                return (DispHTMLDocument) m_browser.Document;
            }
        } catch (InvalidCastException) {

            // nothing to do
        }

        return null;
    }
}

private DispHTMLBody Body {
    get {
        if ( (Document != null) && (Document.body != null) ) {
            return (DispHTMLBody) Document.body;
        } else {
            return null;
        }
    }
}

m_fTextIsNew 在搜索框的 TextChanged 处理程序中设置为 true。

希望这可以帮助。

编辑:添加了正文和文档属性

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式选择网络浏览器控件中的文本? C# 的相关文章

  • 使用链表进行堆排序

    我想知道是否有人曾经使用链表进行堆排序 如果他们可以提供代码 我已经能够使用数组进行堆排序 但尝试在链表中进行排序似乎不切实际 而且在你知道的地方很痛苦 我必须为我正在做的项目实现链接列表 任何帮助将不胜感激 我也用C 答案是 你不想在链表
  • 是否需要销毁运算符删除的形式才能真正销毁对象?

    C 20 添加了破坏形式operator delete区别于std destroying delete t范围 它导致delete表达式在调用之前不再销毁对象operator delete 目的是在显式调用对象的析构函数和释放内存之前 允许
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository

随机推荐

  • 从 iTunes Connect 中删除新的应用程序版本

    我在 iTunes Connect 中使用错误的版本号创建了应用程序的新版本 我想删除处于 准备上传 状态的新版本 我该怎么做呢 关于此还有其他问题 但他们没有提供任何答案 适用于已上传二进制文件的版本 或者已过时 我就此向 Apple 提
  • 在 C++ 中提供指针恒定视图的更好方法

    我有一个类必须返回一个constant一些指向软件上层的指针的视图 在内部 指针必须是非常量 因为类需要在内部操作对象 我没有看到任何选项可以在不复制所有指针的情况下向更高级别的客户端提供指针的常量视图 这看起来很浪费 如果我管理数百万个对
  • 如何连接到 TT X_TRADER API 以使用 python 创建自动交易系统?

    我已经在内部开发论坛中多次看到这个问题 因此想提供一个快速示例 说明如何立即在 python 中实现这一点 首先 请注意 我们所做的只是连接到相关的 X TRADER com 对象 因此以下所有内容仍然适用 https www tradin
  • 如何将复选框与文本对齐到屏幕右侧?

    我里面有一个复选框TableRow 我想将复选框和文本对齐到屏幕的右侧 但是当我使用android gravity right 它仅将文本与屏幕右侧对齐 但不与正方形 复选框本身 对齐 它们似乎是单独对齐的 复选框位于屏幕的左侧 文本位于屏
  • 具有不同函数原型的函数查找表

    除了一系列之外 根据用户输入调用指定函数的最佳方法是什么 if and strcmp 例如 p 2 2 gt call func p 2 2 a 8 gt call func a 7 m gt call func m void 我知道制作一
  • 使用 javascript 或 jQuery 隐藏所有带有与数字“0”或自定义值匹配的文本或innerHTML的“a”元素

    我需要隐藏全部 a 带有文本或的元素innerHTML匹配数字 foo 或使用 javascript 或 jQuery 的自定义值 li a href class dir foo a li 我努力了 jQuery document read
  • 为什么Python列表排序后速度变慢?

    在下面的代码中 我创建了两个具有相同值的列表 一个列表未排序 s not 另一个列表已排序 s yes 这些值由 randint 创建 我为每个列表运行一些循环并计时 import random import time for x in r
  • Rails 5 渲染部分并传递数据

    我无法了解数据传递和提供给部分数据的一般方式 例如 我有一个控制器将实例变量传递给呈现部分的模板 static pages controller rb def home feed items current user feed end ho
  • Cobra + Viper Golang 如何测试子命令?

    我正在使用 Go 开发一个网络应用程序 到目前为止一切顺利 但现在我将 Wercker 集成为 CI 工具并开始关心测试 但我的应用程序严重依赖 Cobra Viper 配置 标志 环境变量方案 并且我不知道如何在运行测试套件之前正确初始化
  • Mathematica 中稀疏数组的 Outer 有效替代方案?

    假设我有两个非常大的列表 a1 a2 和 b1 b2 其中所有 ai 和 bj 都是大型稀疏数组 为了提高内存效率 我将每个列表存储为一个综合稀疏数组 现在我想在所有可能的 ai 和 bj 对上计算某个函数 f 其中每个结果 f ai bj
  • 是否可以通过css在不使用position属性的情况下实现绝对位置功能?

    我正在创建 Outlook 电子邮件 我创建了一个电子邮件系统 我已经签入了 Gmail yahoo 等所有电子邮件巨头 它工作得很好 但突然当我在 Outlook 中看到相同的电子邮件时 令人震惊的是 Outlook 不支持位置属性 现在
  • 准备部署时如何清理 node_modules 文件夹

    我该如何清洁节点模块准备部署代码时的文件夹 我正在使用制作一个应用程序节点 webkit并且在捆绑应用程序的最终版本时希望包含尽可能少的文件 因为解压缩过程需要一些时间 我看过npm dedupe并使用npm install product
  • Window.open 在 IE8 中不起作用?

    这是我当前使用的 JavaScript window open modules mod oneononechat chatwindow php key key color blue x winName x location 0 status
  • Spring security - 更改/登录默认路径

    我们想为我们的 Spring Boot 应用程序添加 spring 安全性 问题是我们已经 login路径已使用 所以目前我们无法加载重定向到的 Spring Security 默认登录页面 login path 我们想要保留 spring
  • X.509v3 ASN.1 到 C 数据结构

    我正在尝试创建代理证书的 X509 请求 ProxyCertInfo 扩展RFC3820 http www ietf org rfc rfc3820 txt 在 C OpenSSL 中 但我无法弄清楚应该如何定义 ProxyCertInfo
  • CDI SessionScoped bean 的非延迟实例化

    CDI新手问题 简单测试场景 JSF CDI SessionScoped beans 我需要一种优雅的方法来实例化一组已知的会话范围的 CDI bean 而无需在JSF页面或从其他 bean 调用它们的方法 作为一个测试用例 一个简单的日志
  • 我什么时候应该使用构建器设计模式? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在学习设计模式并找到了构建器设计模式 这种设计模式有什么好处以及什么时候应该使用它 我冲浪www dofactory com and www
  • getLastKnownLocation() 返回 null [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在这里阅读了很多关于这个主题的问答 但我不得不说它们都不起作用 我的问题是 即使我启用了 GPS 我也无法获取位置 除
  • 应用程序引擎 python 教程错误

    我正在尝试在这里做 python 教程http code google com appengine docs python gettingstarted helloworld html http code google com appeng
  • 如何以编程方式选择网络浏览器控件中的文本? C#

    问题是这样的 我想让我的程序的用户能够在 webBrowser 控件中搜索给定的关键字 标准 Ctrl F 我可以毫无问题地在文档中找到关键字并使用跨度和replace 函数突出显示所有实例 我am无法获得我想要使用的 查找下一个 功能 当