1

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

ASP.NET中,我一直page_load在每次回发时触发的事件中只编写一次,但表单加载只触发一次。

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

有一些相关的材料,但我无法从这些以及更多的材料中得到令人满意的答案。

如何在 Windows 窗体中检测到将要触发的事件?

更新:通过另一种方式谷歌搜索,我找到了一个与另一个链接链接的关闭链接,在 .NET 中查找 Windows 窗体控件的所有事件处理程序是否可以从一个控件中“窃取”事件处理程序并将其提供给其他?. 看完这些后,我认为如果

  1. 我可以在 Form_Load 的末尾以 win 形式获取所有事件的列表(之后我不再添加任何事件)。然后为所有事件添加一些通用功能(比如更改标签文本)。
  2. 我可能能够从父事件继承我的所有事件,并在该事件中添加我想要的功能,然后为每个事件添加(覆盖)特定功能。
4

3 回答 3

2

这取决于您要处理的任何特定事件,因为在您的窗口中,您可以有 Resize、Click、Move 等事件。看看您参考 ASP.NET 提出的观点,您似乎想要处理这个一些按钮点击。

您可以尝试覆盖 WndProc 并处理WM_COMMAND消息。如果您想在单击某个特定按钮时处理此问题,那么我会说您为每个按钮处理此问题。

于 2012-09-12T14:50:38.940 回答
0

您可以使用AOP来做到这一点。使用 Unity(Unity 应用程序块)框架来装饰您的 Windows 窗体窗体中的所有事件方法。在事件方法调用之前调用您的自定义方法。

使用反射和代理模式很容易实现和隐藏代码。相关文章是面向方面的编程、拦截和 Unity 2.0

于 2012-08-29T09:07:38.930 回答
0

如果您想在所有按钮单击事件上运行一些代码,您可以创建一个如下所示的辅助方法,该方法将一个方法附加到表单上所有按钮的单击事件处理程序。

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

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

于 2012-09-15T03:52:44.693 回答