如何在后台代码中自动设置Tag=name

问题描述 投票:0回答:1

有什么方法可以自动为每个 UI 元素实现此目的吗?

var UI = new UI(){ Name="MyUI", Tag=??? }

例如,可能有一个按钮

var btn = new Button(){ Name="myButton", Tag=???  }

当然,我可能会手动完成,但对于任何元素来说,它都会变得无聊且容易出错。 当我必须在 UI 树上搜索它时,这会对我有帮助

谢谢

c# tags uielement elementname
1个回答
0
投票

不确定这是一个WinForms应用程序还是其他应用程序,但如果它是一个WinForms应用程序,您可以递归地获取表单的所有子控件并将Tag设置为控件的名称。这应该在 InitializeComponent 调用之后完成(以确保所有控件都已创建并初始化),这通常是构造函数的一部分。

这是一些示例代码:

递归获取所有子控件

    protected static IList<T> GetChildren<T>(Control control)
        where T : Control
    {
        if (control?.Controls== null)
            return new List<T>();

        var childControls = control.Controls.OfType<T>();
        return childControls.SelectMany(GetChildren<T>).Concat(childControls).ToList();
    }

将控件的标签值设置为其名称

    public UI()
    {
        InitializeComponent();
        var controls = GetChildren<Control>(this);
        foreach (var control in controls)
            control.Tag = control.Name; 
    }

这只是一种潜在的方法。

© www.soinside.com 2019 - 2024. All rights reserved.