将事件添加到表单中的所有标签

萨杰德·古达尔齐

我想使用下面的代码向表单中的所有标签添加 click、mouseleave 和 mouseenter 事件。但是我在 form_load 上调用 addeventtoalllabels 但它不会向标签添加事件。

  public void setColor()
        {
            if (clickedLabel != default(Label))
                clickedLabel.BackColor = Color.Yellow;
            //Resetting clicked label because another (or the same) was just clicked.
        }
        void addeventtoalllabels()
        {
            foreach (Label c in this.Controls.OfType<Label>())
            {
                try
                {
                    c.Click += (sender, e) => {
                        setColor(); 
                        Label theLabel = (Label)sender;
                        clickedLabel = theLabel;
                    };
                    c.MouseEnter += (sender, e) =>
                    {
                        Label theLabel = (Label)sender;
                        if (theLabel != clickedLabel)
                            theLabel.BackColor = Color.Red;
                    };

                    c.MouseLeave += (sender, e) =>
                    {
                        Label theLabel = (Label)sender;
                        if (theLabel != clickedLabel)
                            theLabel.BackColor = Color.Yellow;

                    };
                        }
                catch { }


            }

        }
鲁弗斯

听起来问题在于您的某些标签位于其他容器控件内,因此当您这样做时它们不会被迭代this.Controls.OfType<Label>()(所有Control对象都有一个Controls集合)。

解决此问题的一种方法是递归查看所有控件的Controls集合,以便您可以找到Label属于其他容器控件的子对象。

下面是3种方法:

  1. AddEventsToLabel接收一个Label控件并向其添加事件。
  2. AddEventsToChildLabels接受一个Control参数并检查它是否是Label. 如果是,它将它传递给上面#1 中的方法。否则,它会为传入的每个子控件递归调用自己。
  3. AddEventsToAllLabels用于启动进程 - 此方法调用上面#2 中的方法,将Form自身作为父控件 ( this)传入

这样我们最终会遍历表单上的每个控件,包括其他容器控件中的所有控件:

private void AddEventsToAllLabels()
{
    AddEventsToChildLabels(this);
}

private void AddEventsToChildLabels(Control parent)
{
    if (parent is Label)
    {
        AddEventsToLabel(parent as Label);
    }
    else
    {
        foreach (Control control in parent.Controls)
        {
            AddEventsToChildLabels(control);
        }
    }
}

private void AddEventsToLabel(Label label)
{
    label.Click += (sender, e) => {
        SetColor();
        Label theLabel = (Label)sender;
        clickedLabel = theLabel;
    };

    label.MouseEnter += (sender, e) =>
    {
        Label theLabel = (Label)sender;
        if (theLabel != clickedLabel) theLabel.BackColor = Color.Red;
    };

    label.MouseLeave += (sender, e) =>
    {
        Label theLabel = (Label)sender;
        if (theLabel != clickedLabel) theLabel.BackColor = Color.Yellow;

    };
}

请注意,最好先删除事件处理程序,然后再添加它,以防多次调用此方法。否则,如果您多次将同一个事件处理程序挂接到同一个事件,每次引发该事件时,处理程序将执行它添加的次数。

例如:

private void AddEventsToLabel(Label label)
{
    label.Click -= LabelClick;
    label.MouseEnter -= LabelMouseEnter;
    label.MouseLeave -= LabelMouseLeave;

    label.Click += LabelClick;
    label.MouseEnter += LabelMouseEnter;
    label.MouseLeave += LabelMouseLeave;
}

private void LabelClick(object sender, EventArgs e)
{
    SetColor();
    Label theLabel = (Label)sender;
    clickedLabel = theLabel;
}

private void LabelMouseEnter(object sender, EventArgs e)
{
    Label theLabel = (Label)sender;
    if (theLabel != clickedLabel) theLabel.BackColor = Color.Red;
}

private void LabelMouseLeave(object sender, EventArgs e)
{
    Label theLabel = (Label)sender;
    if (theLabel != clickedLabel) theLabel.BackColor = Color.Yellow;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将点击事件添加到主菜单中的所有“ a”标签

来自分类Dev

将标签添加到symfony表单中(符合WAI)

来自分类Dev

将 Bootstrap 工具提示添加到表单标签中

来自分类Dev

将目标添加到所有UIButtons的touchUpInside事件

来自分类Dev

将点击事件添加到所有选定的元素

来自分类Dev

将事件添加到我添加到表单的每个Picturbox中

来自分类Dev

如何将类添加到表单的所有字段中?

来自分类Dev

将Jquery onclick事件添加到特定类中的所有链接

来自分类Dev

将点击事件添加到WPF中的所有文本框

来自分类Dev

为什么TinyMCE将dir =“ ltr”添加到我所有粘贴的标签中

来自分类Dev

我们如何将下载属性添加到 <body></body> 标签中的所有 <a> 标签(使用 JavaScript)?

来自分类Dev

将整数添加到元组中的所有值

来自分类Dev

将所有行的结果添加到数组中

来自分类Dev

jQuery将类添加到标签的子代和所有标签的子代的子代

来自分类Dev

通过WebExtension将事件监听器添加到所有嵌入式YouTube视频中

来自分类Dev

将Google Analytics(分析)事件添加到PHP中的表单提交中

来自分类Dev

将 Google Analytics 事件添加到表单提交

来自分类Dev

顶点图表将点击事件添加到标签

来自分类Dev

使用dom Javascript将新创建的标签和输入文本添加到表单中?

来自分类Dev

根据文件名的md5将标签添加到logstash事件中

来自分类Dev

将 css 类添加到所有管理表单字段

来自分类Dev

Javascript,将事件监听器添加到所有按钮

来自分类Dev

暂停ItemAdded事件,直到将所有附件添加到其中

来自分类Dev

如何将 HTML 标签添加到 WordPress 上的所有页面?

来自分类Dev

bone.js将模型添加到集合中会添加到集合中的所有模型中

来自分类Dev

提取所有哈希标签并将其添加到Java跨度中?

来自分类Dev

如何使用interfacebuilder为添加到viewcontroller中的所有标签设置相同的颜色?

来自分类Dev

是否可以将所有新文件添加到自动添加到Git的目录中?

来自分类Dev

将现有标签添加到新卡或现有卡中

Related 相关文章

  1. 1

    将点击事件添加到主菜单中的所有“ a”标签

  2. 2

    将标签添加到symfony表单中(符合WAI)

  3. 3

    将 Bootstrap 工具提示添加到表单标签中

  4. 4

    将目标添加到所有UIButtons的touchUpInside事件

  5. 5

    将点击事件添加到所有选定的元素

  6. 6

    将事件添加到我添加到表单的每个Picturbox中

  7. 7

    如何将类添加到表单的所有字段中?

  8. 8

    将Jquery onclick事件添加到特定类中的所有链接

  9. 9

    将点击事件添加到WPF中的所有文本框

  10. 10

    为什么TinyMCE将dir =“ ltr”添加到我所有粘贴的标签中

  11. 11

    我们如何将下载属性添加到 <body></body> 标签中的所有 <a> 标签(使用 JavaScript)?

  12. 12

    将整数添加到元组中的所有值

  13. 13

    将所有行的结果添加到数组中

  14. 14

    jQuery将类添加到标签的子代和所有标签的子代的子代

  15. 15

    通过WebExtension将事件监听器添加到所有嵌入式YouTube视频中

  16. 16

    将Google Analytics(分析)事件添加到PHP中的表单提交中

  17. 17

    将 Google Analytics 事件添加到表单提交

  18. 18

    顶点图表将点击事件添加到标签

  19. 19

    使用dom Javascript将新创建的标签和输入文本添加到表单中?

  20. 20

    根据文件名的md5将标签添加到logstash事件中

  21. 21

    将 css 类添加到所有管理表单字段

  22. 22

    Javascript,将事件监听器添加到所有按钮

  23. 23

    暂停ItemAdded事件,直到将所有附件添加到其中

  24. 24

    如何将 HTML 标签添加到 WordPress 上的所有页面?

  25. 25

    bone.js将模型添加到集合中会添加到集合中的所有模型中

  26. 26

    提取所有哈希标签并将其添加到Java跨度中?

  27. 27

    如何使用interfacebuilder为添加到viewcontroller中的所有标签设置相同的颜色?

  28. 28

    是否可以将所有新文件添加到自动添加到Git的目录中?

  29. 29

    将现有标签添加到新卡或现有卡中

热门标签

归档