繁体   English   中英

能够通过Tag属性找到WinForm控件

[英]Ability to find WinForm control via the Tag property

我在现有的WinForm项目中使用C#。 原始代码使用Tag来传递一组文本框的硬件寻址信息,这些文本框代表连接的微控制器系统中的某些硬件寄存器。 我知道如何通过使用Control.ControlCollection.Find方法搜索其名称来查找未知控件,但我不清楚是否可以通过Tag找到控件(在此实例中只是一个字符串)。

跟进我的评论:

private void FindTag(Control.ControlCollection controls)
{
    foreach (Control c in controls)
    {
        if (c.Tag != null)
        //logic

       if (c.HasChildren)
           FindTag(c.Controls); //Recursively check all children controls as well; ie groupboxes or tabpages
    }
}

然后,您可以在if语句中获取控件名称,并从那里执行您想要执行的操作。

只需在此解决方案中添加一个编辑,因为几年后它仍然会获得不常见的Upvote。 您还可以修改此解决方案以检查c的控件类型 ,并执行不同类型的逻辑。 因此,如果您想循环遍历所有控件并以单向方式处理Textbox而使用RadioButon另一种方式也可以执行此操作。 我必须在一些项目上做到这一点,我只能稍微更改上面的代码以使其工作。 不一定与OP的问题有关,但我想加上它。

您可以使用LINQ基于Tag查找控件

var items = parentControl.ControlCollection;
var item = items.Cast<Control>().FirstOrDefault(control => String.Equals(control.Tag, tagName));
public static Control FindByTag(Control root, string tag)
{
    if (root == null)
    {
        return null;
    }

    if (root.Tag is string && (string)root.Tag == tag)
    {
        return root;
    }

    return (from Control control in root.Controls
            select FindByTag(control, tag)).FirstOrDefault(c => c != null);
}

将最外面的控件传递给它(即您要搜索的表单或容器)。 请注意,这包括搜索的根控制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM