如何将事件传递给方法?

2023-12-13

我想创建一个方法,将事件作为参数并向其添加 eventHandler 以正确处理它。像这样:

我有两个事件:

public event EventHandler Click;
public event EventHandler Click2;

现在我想将一个特定事件传递给我的方法,如下所示(伪代码):

public AttachToHandleEvent(EventHandler MyEvent)
{
    MyEvent += Item_Click;
}

private void Item_Click(object sender, EventArgs e)
{
    MessageBox.Show("lalala");
}

ToolStripMenuItem tool = new ToolStripMenuItem();
AttachToHandleEvent(tool.Click);

是否可以?

我注意到这段代码工作正常,然后返回到我的项目,并注意到当我传递在我的类中声明的事件时,它可以工作,但是当我从其他类传递事件时,它仍然不起作用。

我得到的是这个错误:

事件 'System.Windows.Forms.ToolStripItem.Click' 只能出现在左侧 += 或 -=


我最初的答案适合在定义事件的类中使用,但是您已经更新了您的问题以反映您希望从定义类之外完成此操作,所以我已经解决了这个问题。

只有定义事件的类才能引用事件使用的隐式委托变量。从该类之外,您只能访问add and remove方法,通过+= and -=。这意味着您无法直接执行您所要求的操作。但是,您可以使用函数式方法。

class A{
    public event EventHandler Event1;

    public void TriggerEvent1(){
        if(Event1 != null)
            Event1(this, EventArgs.Empty);
    }
}

class B{
    static void HandleEvent(object o, EventArgs e){
        Console.WriteLine("Woo-hoo!");
    }

    static void AttachToEvent(Action<EventHandler> attach){
        attach(HandleEvent);
    }

    static void Main(){
        A a = new A();
        AttachToEvent(handler=>a.Event1 += handler);
        a.TriggerEvent1();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将事件传递给方法? 的相关文章

  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi

随机推荐

  • 为跨平台开源 UI 无关的 C# 类库选择哪种 Visual Studio 2017 项目类型?为什么?

    我有一个 C 类库的想法 我想开发并发布为开源 我想让它在尽可能多的可用 Net 平台上轻松可用 必要时重新编译 例如完整的 Net Mono Net Core Xamarin 只有经典的 Net 兼容性才是真正必须的 然而 该库不会依赖于
  • 围绕单个语句的事务有什么作用?

    我了解事务如何有助于协调一对更新 我不明白的是在事务中包装单个语句 这是我所见过的 90 事实上 在现实生活中的代码中 根据我的经验 更常见的是发现一系列逻辑相关的事务 每个事务都包装在自己的事务中 但整体并未包装在事务中 在 MS SQL
  • 我的 ViewModel 中的 IEnumerable 未随 EditorForModel 显示

    视图模型 Validator typeof ProdutoCategoriaValidator public class ProdutoCategoriaViewModel HiddenInput DisplayValue false pu
  • 为什么PHP的explode错误?

    这是 PHP 代码 var dump value string 103 0e0cU 0Z dddd is moar awesome A6A32C2074B787893DF506F6F466F5919516C44F3 var dump exp
  • Raspberry Pi 无法在 JavaFX 应用程序中隐藏鼠标光标

    目前 我为 Raspberry Pi 3 开发 JavaFX 应用程序 为了在我的 PC 上进行开发 我使用 Ubuntu 16 04 1 OpenJDK 1 8 0 111 和 OpenJFX 8 0 60 对于 Raspberri Pi
  • Oracle 存储过程 OUT 参数

    我有一个存储过程 其 IN OUT 参数声明如下 create or replace PROCEDURE RIFATT SEGN0 INS pIdRifattSegn0 in OUT NUMBER pNumDossier IN VARCHA
  • 如何定义 Swagger 2.0 JSON 来填充 Swagger UI 中的默认主体参数对象?

    我们当前的部署模式要求我手动编写 swagger json 输出 该输出将由我公司使用的基于 Swagger 的 UI 使用 我希望我正在编写的 json 能够提供 默认 值来填充所有输入字段 包括 body 输入参数 的 Swagger
  • 无法通过angularjs在phonegap中显示联系人照片

    我能够从简单的 html 和 javascript 获取并显示联系人照片 但是当我使用 angularjs 模型显示联系人照片时 出现错误 以下是我的源代码 列出我尝试显示联系人的位置 ul class list li class item
  • 如何使用表单从数组动态创建复选框?

    我想使用代码根据传递给函数的数组或对象动态创建复选框 你能修改这个函数来获取数组吗 我有一个脚本 可以根据用户名查找可能的电脑名称并列出匹配项 如果有这个表格 让我能够选择列表中的结果之一作为正确的 PC 以移入正确的容器并安装软件 那就太
  • MySQL 删除重复行

    我有一个评论表 其结构如下 id name email comment 我有很多重复的评论 具有相同的姓名和电子邮件 我需要删除它们 任何人都可以建议我如何使用单个查询来实现此目的 Thanks DELETE FROM comments c
  • 用于在正在运行的 JVM 中打开调试的 Java API [重复]

    这个问题在这里已经有答案了 是否有一种编程方式可以在正在运行的 JVM 实例中打开调试 我正在寻找一个 API 它可以使运行中的 JVM 成为调试服务器 该 API 的作用相当于 Xdebug Xrunjdwp transport dt s
  • 暂停测试执行,直到应用程序空闲

    是否可以实现一些 util 方法来暂停测试 当前线程 执行 直到应用程序空闲 空闲的意思是 1 一段时间内没有GUI事件添加到事件队列中2 在同一时间段内没有工作线程运行任何任务 您能否提供实现 代码片段来跟踪以前的空闲情况 您可以更换Ev
  • 尝试合并 2 个数据帧但出现 ValueError

    这些是我保存在两个变量中的两个数据框 gt print df head gt club name tr jan tr dec year 0 ADO Den Haag 1368 1422 2010 1 ADO Den Haag 1455 14
  • 已删除的数据存储条目重新出现

    我想重新打开已删除的数据存储条目重新出现作为注册用户 老问题可以删除吗 这次我会尽量说得更具体 我遇到以下问题 最初 我将 N 个同类实体放入数据存储中 如下所示 datastore entity MyModel model propert
  • Perl 函数定义中的 $;$ 是什么意思? [复制]

    这个问题在这里已经有答案了 我得到以下代码 sub deg2rad my d DR 0 1 d rad2rad d 谁能告诉我什么 means 子声明后面括号中的内容称为原型 它们的解释在perlsub 一般来说 你can使用它们来限制编译
  • Android 蓝牙:软件导致连接中止

    每当我尝试将 Android 设备连接到支持蓝牙的设备时 我都会遇到异常 它正在连接 并且在一分钟之内就出现异常 要使用 BLuettoth 设备 Spp 配置文件 进行连接 我正在使用 Method m m mmDevice getCla
  • 在Java中将标签设置为图像格式问题

    我正在尝试将 java 程序中的标签设置为图像 然而 它似乎不适用于 bmp 图像 我正在寻找一个转换器 它允许我将图像从 bmp 转换为具有相同文件名的 jpg 这个转换器需要由java程序控制 其中有需要转换的图像的名称和位置 任何帮助
  • 使用 16 位整数的重要性

    开发人员在编写代码时如何认真考虑使用 16 位整数 自从我开始编程以来 我一直在使用 32 位整数 而且我并没有真正考虑过使用 16 位 声明 32 位 int 非常容易 因为它是大多数语言的默认值 使用 16 位整数部分来节省一点内存有什
  • 将Json反序列化为Asp.net中实现Ienumerable的类

    我有下面的函数 它获取 facebook 数据并将其作为字符串返回 public static string GetUserNewsFeed string strAccessToken Dictionary
  • 如何将事件传递给方法?

    我想创建一个方法 将事件作为参数并向其添加 eventHandler 以正确处理它 像这样 我有两个事件 public event EventHandler Click public event EventHandler Click2 现在