c# - 如果继承的表单订阅了 Show 事件,我可以在父表单中知道吗?
问题描述
我的 winforms 框架中有以下表格
- FormBase(继承自 Form)
- FormBaseList(继承自 FormBase)
- FormBaseDetail(继承自 FormBase)
现在应用程序中的每个表单都继承自上述 3 个表单之一。
例如FormCustomerList
将继承自FormBaseList
现在FormBaseList
事件FormBaseList_Shown
存在(通过在 VS 的属性窗口中双击它)
我想在代码中知道FormBaseList_Show
是否存在事件FormCustomerList_Show
(再次在属性窗口中双击它)。
这甚至可能吗?
那我为什么要这个?
因为框架中的某些更改要求表单不再使用Shown
事件,而是使用自定义事件。
如果他向表单添加事件,我想捕捉并向开发人员显示警告,Show
如果确实需要,他可以设置一个隐藏此警告的属性。
这个警告不需要在设计时显示,在运行时就足够了。但是,如果它在设计时可能,那将是一个奖励。
那么这可以做到吗,是否有更好的方法来做到这一点?
我希望这个解释清楚
编辑
这个想法是,当开发人员使用 Show 事件时,他必须得到警告(在设计时或运行时)。如果他觉得他真的需要 Show 方法,他应该能够为这个特定的表单设置警告
解决方案
您应该以Shown
这种方式隐藏事件并弃用它:
[Obsolete("Shown event is deprecated.")]
public new event EventHandler Shown
{
add { base.Shown += value; }
remove { base.Shown -= value; }
}
您已将其标记为过时,当您构建解决方案时,它会在编译时在错误列表窗口中显示警告。
此外,通过订阅Shown
基地的原始事件,该事件将继续按预期工作。
要禁用警告,请在已订阅事件的表单的 Designer.cs 文件顶部添加以下代码行:
#pragma warning disable CS0618 // Type or member is obsolete
并将这一行添加到底部:
#pragma warning restore CS0618 // Type or member is obsolete
注意:在除designer.cs 文件之外的其他文件中,仅将事件处理程序订阅用. 包围就足够了#pragma
。但是对于designer.cs,您不能围绕事件处理程序订阅,因为通过更改设计器中的任何内容,InitializeComponent
定义成员变量的内容和代码块将自动生成,并且您在designer.cs中的所有手动更改都将丢失. 但是如果你放在#pragma
文件的顶部和底部,它是安全的,不会从 Designer.cs 中删除。
推荐阅读
- python - Matplotlib 条形图_得到意外的图表
- ios - 在 Swift 中按顺序执行任务
- git - git make branch 镜像一个不同的分支
- javascript - 装饰器功能不起作用(意外令牌)
- php - 我无法让 imagemagick 在非线程安全的 Windows Server 2016 上的 PHP 中工作
- c++ - 如何运行使用 OOP 存储在容器中的实际对象的功能?
- shiny - 闪亮的 Websocket 空闲超时
- reactjs - 中继突变后使用查看器更新子组件
- sharepoint-api - 是否可以强制 SharePoint REST API 异常为英文?
- embedded-linux - devtool 命令行工具中的完成子命令是删除还是替换?