简单的自定义事件

2023-11-21

我正在尝试学习自定义事件,并尝试创建一个,但似乎我遇到了问题

我创建了一个表单、静态类和自定义事件。我想要实现的是,当我按下按钮时,Form 将调用静态类函数,然后 func 将不时引发一个事件来报告当前状态。 Form1 将侦听该事件是否引发,如果引发,它将更改 label1 的文本

这是我到目前为止所拥有的

public partial class Form1 : Form
{
    public EventHandler<Progress> progress; 

    public Form1()
    {
        InitializeComponent();
        progress += SetStatus;
    }

    private void SetStatus(object sender, Progress e)
    {
        label1.Text = e.Status;
    }

    private void button1_Click_1(object sender, EventArgs e)
    {
         TestClass.Func();
    }

 }

File 2

class TestClass
{
    public static void Func()
    {
        //time consuming code
        Report status 
        // time consuming code
        report status
    }
}

public class Progress : EventArgs
{
    public string Status { get; private set; }

    private Progress() {}

    public Progress(string status)
    {
        Status = status;
    }
}

现在我不明白的是,如何从 TestClass 中引发事件,以便 Form1 可以处理事件并更改 label.Text


这是创建自定义事件并引发它们的简单方法。您在要抛出的类中创建一个委托和一个事件。然后从代码的另一部分订阅该事件。您已经有了一个自定义事件参数类,因此您可以在此基础上构建其他事件参数类。 N.B:我还没有编译这段代码。

public partial class Form1 : Form
{
    private TestClass _testClass;
    public Form1()
    {
        InitializeComponent();
        _testClass = new TestClass();
        _testClass.OnUpdateStatus += new TestClass.StatusUpdateHandler(UpdateStatus);
    }

    private void UpdateStatus(object sender, ProgressEventArgs e)
    {
        SetStatus(e.Status);
    }

    private void SetStatus(string status)
    {
        label1.Text = status;
    }

    private void button1_Click_1(object sender, EventArgs e)
    {
         TestClass.Func();
    }

}

public class TestClass
{
    public delegate void StatusUpdateHandler(object sender, ProgressEventArgs e);
    public event StatusUpdateHandler OnUpdateStatus;

    public static void Func()
    {
        //time consuming code
        UpdateStatus(status);
        // time consuming code
        UpdateStatus(status);
    }

    private void UpdateStatus(string status)
    {
        // Make sure someone is listening to event
        if (OnUpdateStatus == null) return;

        ProgressEventArgs args = new ProgressEventArgs(status);
        OnUpdateStatus(this, args);
    }
}

public class ProgressEventArgs : EventArgs
{
    public string Status { get; private set; }

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

简单的自定义事件 的相关文章

  • asp:repeater 折叠表行 - 已更新

    我想知道是否有人对我的问题有创造性的解决方案 我有一个从我的数据库填充的转发器 如下所示
  • 集群():是否可以仅检查文件是否已锁定,而不实际获取锁定(如果没有)?

    我的用例如下 我有一个程序 它强制在任何给定时间只能运行它的一个实例 因此在启动时它总是尝试在标准位置获取锁定文件 并在该文件终止时终止已经被锁定 这一切都工作正常 但现在我想用一个新的命令行选项来增强程序 当指定该选项时 将导致程序只打印
  • 处理器关联组 C#

    我使用的是 72 核的 Windows Server 2016 我看到有两组处理器 我的 net 应用程序将使用一个或其他组 我需要能够强制我的应用程序使用我选择的组 我看到下面的代码示例 但我无法使其工作 我可能传递了错误的变量 我希望应
  • 没有配置身份验证处理程序来处理该方案

    这是一个非常烦人的问题 我在我的 asp net core 项目上设置 cookie 身份验证 有时会出现此错误 有时不会 没有图案 它只是开始抛出错误 然后突然停止 然后再次开始 例外情况是 InvalidOperationExcepti
  • 如何将 dll 中包含的组件嵌入到 exe 中,以便它可以从内存运行?

    我正在尝试制作一个必须从内存运行的程序 通过Assembly Load bin 如上所述here http www codeproject com Articles 13897 Load an EXE File and Run It fro
  • MVC BaseController 处理 CRUD 操作

    我想重构我的基本 CRUD 操作 因为它们非常重复 但我不确定最好的方法 我的所有控制器都继承 BaseController 如下所示 public class BaseController
  • 使用c#在mac上启动外部进程

    我成功地使用 System Diagnostics Process Start 在 Windows 上启动我的外部单声道可执行文件 然而在mac上却失败了 我没有收到任何错误 只是什么也没发生 我尝试按以下方式进行操作 System Dia
  • 在编译输出中添加程序集绑定 (app.config)

    如果我编译应用程序 则会在输出中自动添加程序集绑定 具体的程序集绑定不在app config在 Visual Studio 中但在创建的应用程序配置中 有什么办法可以检查为什么会自动添加程序集绑定吗 选项AutoGenerateBindin
  • 我应该使用字节还是int?

    我记得曾在某处读到 即使您只需要字节 使用 Int32 更好 就性能而言 它 据说 仅适用于您不关心存储的情况 这是有效的吗 例如 我需要一个保存一周中某一天的变量 我是吗 int dayOfWeek or byte dayOfWeek E
  • 如何为二进制格式化程序创建 SerializationBinder,以处理类型从一个程序集和命名空间到另一个程序集和命名空间的移动

    上下文如下 我想通过将代码移动到不同的项目来重构代码 其中一些代码包含可序列化的 DTO 用于 跨多个端点发送和接收数据 如果我移动代码 序列化就会中断 因此它不是 向后兼容我的应用程序的旧版本 这个问题的一个解决方案是 Serializa
  • 来自同一基模板类的 C++ 重写函数,具有多重继承不明确的函数调用

    我需要打电话init int iNumber 从基类派生的函数 基类 h pragma once include stdafx h template
  • 大小为 k 的非连续子序列的最大值的最小值

    在开始之前 我希望这个问题不是重复的 我发现了几个类似的问题 但它们似乎都没有描述完全相同的问题 但如果它是重复的 我会很高兴看到一个解决方案 即使它与我的算法不同 我一直在尝试回答这个问题 https stackoverflow com
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • Qt - 添加超链接到对话框

    有没有办法在 Qt 对话框中添加可点击的超链接 IE 它应该看起来像一个超链接 蓝色文本 当您单击它时 它应该在浏览器中打开该超链接 像这样的东西 Use QLabel setOpenExternalLinks bool 并在标签上设置文本
  • 使用 StartServiceCtrlDispatcher 与 StartService 从 C 语言启动 Windows 服务有什么区别?

    我尝试使用 StartServiceCtrlDispatcher 中所述https msdn microsoft com en us library windows desktop bb540475 v vs 85 aspx https m
  • TCP/IP 传输期间套接字数据损坏

    当我通过预连接的 TCP IP 套接字发送数据时 我发现数据已损坏 Example Station1 正在向 Station2 发送数据 我已经在发送之前 在 S1 和接收之后 在 S2 打印了数据 以下是消息 S1 发送的数据是ACKS2
  • 在 C 中运行 setuid 程序的正确方法

    我有一个权限为4750的进程 我的Linux系统中存在两个用户 root 用户和 appz 用户 该进程继承以 appz 用户身份运行的进程管理器的权限 我有两个基本惯例 void do root void int status statu
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web

随机推荐

  • 如何找出touchmove javascript事件的实际event.target?

    我正在尝试在我的 Web 应用程序中开发一个简单的拖放 UI 可以用鼠标或手指拖动项目 然后将其放入多个放置区域之一 当一个项目被拖过放置区域 但尚未释放 时 该区域会突出显示 标记安全着陆位置 这对于鼠标事件来说工作得很好 但我在 iPh
  • PyInstaller 文件大小非常大

    我使用 wxPython 制作了简单的代码编辑器 文件大小 Python 文件 为 1 3 KB 但是当我使用 PyInstaller 创建可执行文件时 我得到30 MB 文件 有没有办法减小文件大小 顺便说一句 我没有导入整个wx库 只有
  • Discord Bot 无法按名称或 ID 找到频道

    我正在尝试使用 DiscordJS 制作一个不和谐机器人 我想获取特定频道 const Discord require discord js var bot new Discord Client var myToken NDQ2OTQ1 v
  • Font-face 在 IE、otf 字体中不起作用

    我知道这个问题被问过多次 但在尝试后我无法让它工作 这是我用来导入自定义字体的简单 CSS 另外 我将其与引导程序一起使用 font face font family Montserrat Black src url Montserrat
  • 在成员函数内的 lambda 捕获列表中使用数据成员

    以下代码可以使用 gcc 4 5 1 进行编译 但不能使用 VS2010 SP1 进行编译 include
  • 退出 Smarty 以手动执行

    我面临的问题是 我不太确定如何在没有框架或模板引擎的情况下进行开发 我开始以这种方式编码 现在我想学习基础知识 我曾经使用过这种 MVC 模式 使用 Codeigniter 和 Smarty 作为模板引擎 我现在想做的是使用原始 php 而
  • 从远程 ssh 存储库进行 Git 克隆 - 在执行克隆命令之前更改远程网络上的机器

    我想将 git 存储库从我公司的服务器克隆到我的个人计算机 从 外部 访问这些服务器的唯一方法是通过 ssh 登录到 machine1 ssh email protected 不幸的是 git 没有安装在该特定机器上 所以像这样的 git
  • 如何提取

    标签之间的文本

    我想从 HTML 页面中提取文本p and li标签 这样我就可以开始对页面进行标记 为每个页面构建倒排索引 以便回答搜索查询 我怎样才能得到p使用 jsoup 的标签 Elements e doc select 该参数中要写入的字符串是什
  • 传递数据帧以在函数内进行变异

    我想传递一个数据框及其列 以供函数内的 dplyr 的 mutate 处理 这是一个例子 multifun lt function dataf vari mutate dataf newvar vari 2 multifun mtcars
  • 在 Haskell 中设置 argv[0]?

    有没有办法设置argv 0 在 Haskell 程序中 例如 用 ghc 编译的程序 我找到了getProgName and withProgNameSystem Environment 中的函数 但它似乎没有改变什么ps报告 Ubuntu
  • QComboBox AbstractItemView::item

    有没有办法可以增加 QComboBox 控件中列出的项目的高度 我尝试按照此处的建议进行操作在 QTDevNet 论坛中但没有运气 QComboBox QAbstractItemView item margin top 3px 我也尝试过这
  • 将 numpy 类型转换为 python

    我有一个从 pandas 生成的以下形式的字典列表 我想把它转换成json格式 list val 1 0 685 2 0 8 output json dumps list val 但是 json dumps 抛出错误 TypeError 6
  • PHP:如何使用 smtp 设置发送带有附件的电子邮件?

    我使用以下代码成功发送电子邮件 但现在我想在电子邮件中附加一个文本文件 例如 test txt 任何想法 require once Mail php from Usman lt email protected gt to Naveed lt
  • 具有 byte[] 字段作为存储过程参数的 DataTable

    我一直在重复使用这种使用 DataTable 作为存储过程参数的方法 并且效果很好 这是简化的工作代码 using dbEntities dbe new dbEntities var dt new dataTable dt Columns
  • 使用 OpenCV fitEllipse() 进行圆拟合

    使用OpenCV是否有效拟合椭圆用于圆拟合 fitEllipse 返回cv RotatedRect如何平均宽度和高度来获得拟合的圆半径 我认为使用的 有效性 cv fitEllipse拟合圆取决于您所需的拟合精度 例如 您可以在测试集上运行
  • HTMLCanvasElement 上未解决的方法 captureStream

    我的画布元素和方法有奇怪的情况captureStream 根据文档 HTMLCanvasElement 有一个方法captureStream 然而我的 Angular6 应用程序声称没有这样的方法 所以这段代码将不起作用 let canva
  • ITextSharp 解析包含图像的 HTML:它解析正确,但不会显示图像

    我正在尝试使用 ITextSharp 库从 html 生成 pdf 我能够创建 pdf 并将 html 文本转换为 pdf 文本 段落 我的问题 pdf 不显示我的图像 我的imghtml 中的元素 我所有的img我的 html 中的 ht
  • 如何 git 应用 git word diff

    我需要编辑一个混乱的提交 该提交仅更改了后续几行中的一个单词 保留其中一些更改并删除其他更改 这些变化很容易看出git diff word diff 并且以这种格式 我可以轻松地编辑帅哥来做我想做的事情 但现在我有一个像这样的文件 diff
  • 减少 App Store 中 iOS 应用程序的大小

    我正在尝试在 App Store 中提交应用程序 如果可能的话 我需要稍微减少其内存 我尝试了一种方法 我将在下面描述 来使我的应用程序更轻 但运气不佳 Details 我按照以下步骤查看导致尺寸如此之大的原因 将项目存档 分发它 节省用于
  • 简单的自定义事件

    我正在尝试学习自定义事件 并尝试创建一个 但似乎我遇到了问题 我创建了一个表单 静态类和自定义事件 我想要实现的是 当我按下按钮时 Form 将调用静态类函数 然后 func 将不时引发一个事件来报告当前状态 Form1 将侦听该事件是否引