首页 > 解决方案 > 将相同的事件应用于 C# 中的每个项目按钮

问题描述

我有一个包含 3 个表单和 10 个用户控件的项目。这些组件中的每一个都有大约 10 个按钮。我想在用户悬停时使用事件来应用样式。有没有办法可以为通用组件创建此事件,然后将其自动应用于每个组件?因为我不一定有心情手动完成130个按钮事件^^

标签: c#winforms

解决方案


您可以使用递归方法并在表单上调用它。它将遍历表单的所有子控件及其子控件,如果它们是按钮,它将链接到您的集中式方法。

这是一个带有 Click 事件的示例,但它可以应用于任何事情:

    private void RecursiveClickSubscribe(Control c)
    {
        if (c is Button)
        {
            c.Click += GenericClickHandler;
        }
        foreach (Control child in c.Controls)
        {
            RecursiveClickSubscribe(child);
        }

    }

    private void GenericClickHandler(object sender, EventArgs e)
    {
        // stuff you want to do on every click
    }

    Form myForm; // one of your three forms.
    RecursiveClickSubscribe(MyForm);

推荐阅读