我有许多事件Windows窗体形式。 我有一个反馈标签,我必须写feedbaxk.Text =“”; 在每一个事件的开始。
在ASP.NET ,我一直在使用它只写一次page_load
这是对每一个回发触发的事件,而是形成火灾负荷只有一次。
我试图与我的问题的标题搜索,发现以下两个最接近的答案:
有一些相关的资料,但我不能让这些和许多更令人满意的答案。
如何在Windows检测到窗体的事件将被解雇?
更新:谷歌搜索它的另一种方式,我发现这是与其他链路链接紧密的联系, 找到所有的事件处理程序为Windows .NET中的窗体控件和是否有可能从一个控制“偷”的事件处理程序,并给它另一个? 。 草草看完之后我认为这是可能的,如果
- 我能得到一个双赢的形式,所有的事件列表中的Form_Load结束(在那之后我不添加任何更多的事件)说。 再加入少许常用功能(比如更改标签文本)的所有活动。
- 我也许能继承我所有的事件从父之一,在该事件中添加我想要的功能,然后添加(覆盖)的特定功能对每个事件。
这取决于你要处理,因为在你的窗口,你可以有调整大小事件的任何特定的事件,点击,移动,等看你参考ASP.NET提出的观点,似乎要在处理这个问题一些按钮的点击。
你可以尝试重写的WndProc和处理WM_COMMAND消息。 如果你想处理这对一些特定的按钮点击,那么我会说你处理这个每个按钮。
如果你想运行在所有按钮点击事件的一些代码,你可以建立一个像它附加一个方法,单击事件处理程序的窗体上的所有按钮下面一个辅助方法。
public static class UIHelper
{
public static void RegesterButtonClicks(Form form, EventHandler method)
{
foreach (Control control in form.Controls)
{
if (control is Button)
{
control.Click += method;
}
}
}
}
然后创建你的方法对所有按钮点击运行。 事情是这样的:
private void OnButtonClick(object sender, EventArgs e)
{
//Code for all clicks here
}
然后添加下面的代码行中的InitializeComponent下(); 在构造线
UIHelper.RegesterButtonClicks(this, OnButtonClick);
您还可以扩展的辅助方法,该方法附加到其他活动和其他类型的控件,以及如果你需要的。
为此,您可以使用AOP 。 使用统一(Unity应用程序块)架构来装饰您的所有事件方法在Windows窗体形式。 调用事件方法调用之前您的自定义方法。
这是很容易使用反射和隐藏代码做和代理模式 。 一个相关的文章是面向方面编程,拦截和Unity 2.0 。