如何通过标签查找视图?

时间:2020-03-19 14:38:53

标签: c# winforms

我有一个Form,其中包含一些我动态创建的TableLayoutPanel(列表面板)。

每个TableLayoutPanel都有一个唯一的标签。实际上,每个面板都有Lable,而这个LableName = "lable_name"

我需要在Label中更新此确切的TableLayoutPanel

public void UpdateLable(string tag, string newText)
        {
            foreach(var tlp in Views)
            {
                if (tlp.Tag.ToString().Equals(tag))
                {
                    var lable = tlp.findViewByName("lable_name") as Label;
                    lable.Text = newText;
                }
            }
        }

但是我找不到像findViewByName()

这样的方法

所以,问题是-如何按名称查找视图?

2 个答案:

答案 0 :(得分:2)

创建如下方法

public static IEnumerable<Control> GetControlsOfType<T>(Control control)
{
    var controls = control.Controls.Cast<Control>();
    return controls.SelectMany(ctrl => GetControlsOfType<T>(ctrl)).Concat(controls).Where(c => c is T);
}

一样使用
Var control= GetControlsOfType<Label>(yourView).FirstOrDefault(x => x.Tag == tag);

if(control != null)
   control.Text = newText

答案 1 :(得分:1)

TableLayoutPanel类中没有直接这样的方法。但是每个Control都具有Controls属性-子控件的集合。

专门集合具有Find方法,该方法允许按名称获取子项:

var label = tlp.Controls.Find("lable_name", true)[0] as Label;