Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows窗体中页面加载的替代方法_C#_Winforms_Postback_Desktop Application - Fatal编程技术网

C# Windows窗体中页面加载的替代方法

C# Windows窗体中页面加载的替代方法,c#,winforms,postback,desktop-application,C#,Winforms,Postback,Desktop Application,我在表格上有许多事件。我有一个反馈标签,我必须写feedbaxk.Text=“”;在每个活动开始时 在中,我只在每次回发时触发的page\u load事件中写入一次,但表单加载只触发一次 我试着用我问题的标题搜索,找到了以下两个最接近的答案: (字节) (筹委会审查) 有一些相关的材料,但我无法从这些以及更多的材料中得到满意的答案 如何在Windows窗体中检测将要触发的事件? 更新:通过另一种方式在谷歌上搜索,我发现了一个与其他链接链接的紧密链接,并且。在看了这些之后,我认为如果 我可以在

我在表格上有许多事件。我有一个反馈标签,我必须写feedbaxk.Text=“”;在每个活动开始时

在中,我只在每次回发时触发的
page\u load
事件中写入一次,但表单加载只触发一次

我试着用我问题的标题搜索,找到了以下两个最接近的答案:

  • (字节)

  • (筹委会审查)

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

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

更新:通过另一种方式在谷歌上搜索,我发现了一个与其他链接链接的紧密链接,并且。在看了这些之后,我认为如果

  • 我可以在win表单中得到所有事件的列表,比如在form_Load的末尾(之后我不再添加任何事件)。然后向所有事件添加一点通用功能(例如更改标签文本)
  • 我可能能够从父事件继承所有事件,并在该事件中添加所需功能,然后向每个事件添加(覆盖)特定功能
  • 您可以使用。使用Unity(Unity应用程序块)框架装饰Windows窗体中的所有事件方法。在事件方法调用之前调用自定义方法


    使用反射和。一篇相关文章是。

    它取决于您想要处理的任何特定事件,因为在您的窗口中,您可以有调整大小、单击、移动等事件。查看您参考ASP.NET提出的点,您似乎希望通过单击某个按钮来处理此问题


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

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

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

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

    well。谢谢你的指导,我会研究这些东西并尝试更新,因为目前我还不知道这些东西。这对我来说似乎很难。我理解,但这是正确完成这件事的唯一方法。您也可以将所有windows窗体事件关联到同一个方法,但这将非常困难(在像控制器这样的方法中,您必须检测哪个控件以及哪个事件将其路由到具有大开关情况的好方法上,这既困难又非常糟糕)…aop是所有横向过程(技术日志、安全性等)的答案。有一天下载unity并设置aop就足够了,你会发现这很容易;-)由于底层Windows消息到达窗体窗口句柄,会引发许多事件(不是全部),因此您可以重写受保护的Form.WndProc方法,并尝试编写一些“全面捕获”系统。取决于你最终想要实现什么,这可能是一个开始。连接到WndProc应该足以满足您的需要。我正在进行SimonMourier指导@列夫!这不仅仅是关于按钮点击,而是关于所有添加的事件,例如,一个文本框\你留下一个组合框\你选择了索引\你更改了一个文本框\你的背景颜色更改了等等…通过谷歌搜索,我发现了一个与另一个链接链接的紧密链接…-------@汉帕桑。你回答了一些类似的问题。查看我的更新。我希望你能最好地回答这个问题+1。只要覆盖WndProc。你会发现在ASP.NET回发中发生的事情比你得到的要多得多,所以你需要非常明确地过滤消息,以“从消防水管sip”,所以你只需要处理你关心的事情。对。我试试看。根据问题的要求,所有事件都需要一个公共事件。这意味着,无论组合框的selectedindexchanged或按钮是否被单击,都不会有不触发最常见事件的事件