WebBrowser 控件 onpropertychange 事件的事件处理程序 - sender 和 e 对象为 null

2023-12-15

在 C# 中,我在服务器端线程中运行 WebBrowser (WB) 控件,并希望监视(侦听)“onpropertychange”事件。我可以成功附加一个在属性更改时执行的 .NET 委托签名方法,但是sender 和 e 对象均为 null因此,在每次调用 qEventHndlr 时,我不知道更改哪个属性来触发事件。 el 是一个 HTMLElement,它在 foreach 循环中迭代,以将事件处理程序附加到每个要监视(侦听)的元素。

el.AttachEventHandler("onpropertychange", qEventHndlr);     // in the foreach loop
public void qEventHndlr(Object sender, EventArgs e) {…}     // the event handler

文档表明EventArgs类; “此类不包含事件数据;引发事件时不将状态信息传递给事件处理程序的事件使用它。如果事件处理程序需要状态信息,则应用程序必须从此类派生一个类来保存数据”。 似乎(我不确定也没有测试过)发件人仅填充了 WB 事件的子集,而不是 onpropertychange。

因此,我随后想到,如果无法在 send 或 e 对象中获取标识符信息,我可以在 AttachEventHandler 中使用匿名方法,然后将唯一的运行时可编程字符串参数传递给嵌入在事件处理程序方法调用中的方法。

el.AttachEventHandler("onpropertychange", delegate(Object sender, EventArgs e) { anonoMeth(elID); });
public void anonoMeth(string specificProperty) {..}

然而,编译器接受了该语法,即使 elID 字符串在 foreach 循环中发生更改,也仅使用第一个迭代值,因此当每个 onpropertychange 事件调用 anonoMeth(string SpecificProperty) 时,specicProperty 具有相同的值,因为相同的 elID被附加到相应的元素。

我还没有尝试过扩展方法,想发布这篇文章来看看是否有人遇到过类似的挑战(希望有解决方案)。除非绝对必要,否则我宁愿不诉诸 C++。


你需要投射你的sender到适当类型的对象(HTMLElement在您的情况下)在您的事件处理程序中。

试试这个例子的尺寸:

namespace WebBrowserEventTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            webBrowserTest.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowserTest_DocumentCompleted);
            webBrowserTest.Navigate("http://mondotees.com");
        }

        private void webBrowserTest_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            foreach(HtmlElement el in webBrowserTest.Document.GetElementsByTagName("div"))
            {
                el.AttachEventHandler("onpropertychange", delegate { testEventHandler(el, EventArgs.Empty); });
            }

            foreach (HtmlElement el in webBrowserTest.Document.GetElementsByTagName("div"))
            {
                el.Name = "test";
            }
        }

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

WebBrowser 控件 onpropertychange 事件的事件处理程序 - sender 和 e 对象为 null 的相关文章

随机推荐

  • boost 中的共享内存向量

    我有以下代码 尝试拥有一个具有字符串和数组结构的共享内存向量 但是当我编译代码时出现错误 usr local include boost container vector hpp 1819 4 error no matching funct
  • 在标题中隐藏类类型

    我不确定这是否可能 但这里是 我有一个库 其界面充其量是复杂的 不幸的是 它不仅是一个第三方库 而且太大而无法重写 而且我还使用了一些依赖于它的其他库 因此该界面必须保持原样 为了解决这个问题 我试图从本质上包装接口并将所有依赖项的接口捆绑
  • OPOS PosExplorer.GetDevice() 在 Windows 服务中执行时返回 null

    下面的代码片段利用 OPOS NET 打开 POS 打印机进行打印 当作为独立应用程序的一部分执行时 它工作得很好 当由 Windows 服务执行时 对 GetDevice 的调用始终返回 null explorer new PosExpl
  • Spring boot应用程序启动时如何缓存数据

    我有一个连接到 SQL Server 数据库的 Spring boot 应用程序 我需要一些帮助来在我的应用程序中使用缓存 我有一个 CodeCategory 表 其中包含许多代码的代码列表 该表将每月加载一次 并且数据每月仅更改一次 我想
  • Inno安装程序更改Setup.tmp的任务管理器描述

    我已经怀疑这是不可能的 并且可能是硬编码的 需要修改 Inno Setup 源代码 但是 Inno Setup 非常灵活 所以也许有办法吗 是否可以将与Setup exe 一起运行的Setup tmp 的Windows 任务管理器描述字段中
  • 在 Objective-C 中获取 NSURL 的一部分

    我有一个 NSString 其值为 http digg com news business 24hr 如何获得第三级之前的所有内容 http digg com news 请注意 这不完全是第三层 URL 的分割方式如下 协议或方案 这里 h
  • PHP 会话*并不总是*有效

    我最近将一堆网站迁移到新的 VPS 但 PHP 会话遇到了很多问题 所有网站的配置方式几乎相同 但有一个网站的会话并不总是有效 让我烦恼的是它是随机的 我可以访问该网站并登录 并且会话将正常工作 然后 我一小时后返回 尝试使用同一帐户登录
  • 更改 Firemonkey TListView 中的交替颜色

    将 tlistview 拖放到表单上并检查属性 AlternatingColors 为 true 默认情况下它将在列表视图上的所有其他项目上显示灰色背景 我的问题是现在有人如何将此颜色更改为其他颜色吗 Thanks 您需要编辑 TlistV
  • 如何从给定的 inode 获取路径名或 dentry 或结构文件?

    我需要知道如何获取路径名或dentry or struct file来自给定的索引节点 我正在使用file open获得struct file来自路径名 但总是引起内核恐慌 我需要一种方法来将我的 inode 列表中的 inode 与路径名
  • Prolog 替换

    如何用包含要替换的变量的另一个列表替换一个列表 例如 rep x d e z x z p x z z x d c R R z c e x z x p x 到 z 和 z 在替换后不会改变 到目前为止我只做了没有清单的那一项 rep rep
  • 方法的 ES6 对象字面量语法

    我正在看这个这一页有关 ES6 中用于声明对象内部方法的各种简写语法 我不明白这两种形式之间的区别 var foo a b and var foo x y gt y 这篇文章似乎对这两种格式做了明确的区分 但是第一种格式不就真的变成了第二种
  • 带有 jQ​​uery 和 Masked 输入插件的电话掩码

    我在使用 jQuery 屏蔽电话输入时遇到问题屏蔽输入插件 有 2 种可能的格式 XX XXXX XXXX XX XXXXX XXXX 有什么办法可以掩盖它接受这两种情况吗 EDIT I tried phone mask 99 9999 9
  • 使用 urn:schemas 按电子邮件地址搜索

    I found 这段代码来自里卡多 迪亚兹 它贯穿始终 我想搜索我收到或发送到特定的最新电子邮件电子邮件地址与搜索相反subject 我更换了 searchString urn schemas httpmail subject like e
  • 反引号 (`...`) 在 JavaScript 中调用函数

    我不知道如何解释这一点 但是当我跑步时 console log 1 在谷歌浏览器中 我得到的输出如下 console log 1 VM12380 2 1 raw Array 1 为什么反引号调用日志函数 以及为什么它创建索引raw Arra
  • Python函数默认参数随机值

    在下面的代码中 按照预期生成了一个随机值 import random for i in range 10 print random randint 0 10 但是 如果我使用函数 这将不起作用 import random def f val
  • c++:MPI 通信器作为全局变量

    我需要可以在函数 类成员函数中访问 MPI 世界通信器 但按照设计 惯例 MPI 环境和通信器总是在开始时定义和初始化 int main 我能想到的唯一简单的解决方案是使用指向通信器的全局指针 有人知道更好的方法吗 使用全局指针解决方案有危
  • 像使用 MySQL 一样获取 Twitter 关注者

    你好 假设我有一个例子 我的关注表 A B 1 2 same so its friend 2 1 same so its a friend 1 3 user 1 is following 3 1 4 user 1 is following
  • clang 错误:未知参数:'-mno-fused-madd' (python 包安装失败)

    尝试安装时出现以下错误psycopg2通过 Mavericks 10 9 上的 pip clang error unknown argument mno fused madd Wunused command line argument ha
  • 如何使用 DocumentBuilderFactory Android 应用程序在 Android 中创建、读取和写入 XML 文件

    我正在使用我的应用程序实现一项服务 在Android应用程序中如何创建XML文件以及如何读取和写入XML文件 在我们的资源文件夹中 不使用SD卡 None
  • WebBrowser 控件 onpropertychange 事件的事件处理程序 - sender 和 e 对象为 null

    在 C 中 我在服务器端线程中运行 WebBrowser WB 控件 并希望监视 侦听 onpropertychange 事件 我可以成功附加一个在属性更改时执行的 NET 委托签名方法 但是sender 和 e 对象均为 null因此 在