替代pageLoad的Wi​​ndows窗体(Alternative to PageLoad in

2019-10-17 04:39发布

我有许多事件Windows窗体形式。 我有一个反馈标签,我必须写feedbaxk.Text =“”; 在每一个事件的开始。

在ASP.NET ,我一直在使用它只写一次page_load这是对每一个回发触发的事件,而是形成火灾负荷只有一次。

我试图与我的问题的标题搜索,发现以下两个最接近的答案:

  • 的WinForms相当于ASP.NET页面加载事件 (字节)

  • 的WinForms相当于ASP.NET页面加载事件 (PC评论)

有一些相关的资料,但我不能让这些和许多更令人满意的答案。

如何在Windows检测到窗体的事件将被解雇?

更新:谷歌搜索它的另一种方式,我发现这是与其他链路链接紧密的联系, 找到所有的事件处理程序为Windows .NET中的窗体控件是否有可能从一个控制“偷”的事件处理程序,并给它另一个? 。 草草看完之后我认为这是可能的,如果

  1. 我能得到一个双赢的形式,所有的事件列表中的Form_Load结束(在那之后我不添加任何更多的事件)说。 再加入少许常用功能(比如更改标签文本)的所有活动。
  2. 我也许能继承我所有的事件从父之一,在该事件中添加我想要的功能,然后添加(覆盖)的特定功能对每个事件。

Answer 1:

这取决于你要处理,因为在你的窗口,你可以有调整大小事件的任何特定的事件,点击,移动,等看你参考ASP.NET提出的观点,似乎要在处理这个问题一些按钮的点击。

你可以尝试重写的WndProc和处理WM_COMMAND消息。 如果你想处理这对一些特定的按钮点击,那么我会说你处理这个每个按钮。



Answer 2:

如果你想运行在所有按钮点击事件的一些代码,你可以建立一个像它附加一个方法,单击事件处理程序的窗体上的所有按钮下面一个辅助方法。

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);

您还可以扩展的辅助方法,该方法附加到其他活动和其他类型的控件,以及如果你需要的。



Answer 3:

为此,您可以使用AOP 。 使用统一(Unity应用程序块)架构来装饰您的所有事件方法在Windows窗体形式。 调用事件方法调用之前您的自定义方法。

这是很容易使用反射和隐藏代码做和代理模式 。 一个相关的文章是面向方面编程,拦截和Unity 2.0



文章来源: Alternative to PageLoad in Windows Forms