C# 如何通过标记查找视图?
我有一个C# 如何通过标记查找视图?,c#,winforms,C#,Winforms,我有一个表单,其中包含一些我动态创建的表格布局面板(列表面板) 每个TableLayoutPanel都有一个唯一的标记。实际上,每个面板都有标签,而这个标签有Name=“Lable\u Name” 我需要在表格布局面板中更新这个确切的标签 public void UpdateLable(string tag, string newText) { foreach(var tlp in Views) {
表单
,其中包含一些我动态创建的表格布局面板
(列表面板)
每个TableLayoutPanel
都有一个唯一的标记。实际上,每个面板都有标签
,而这个标签
有Name=“Lable\u Name”
我需要在表格布局面板
中更新这个确切的标签
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()这样的方法
所以,问题是-如何按名称查找视图?创建一个方法,如下所示
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);
}
公共静态IEnumerable GetControlSoftType(控件)
{
var controls=control.controls.Cast();
返回控件。选择many(ctrl=>GetControlsOfType(ctrl)).Concat(控件)。其中(c=>c是T);
}
像这样使用它
Var control= GetControlsOfType<Label>(yourView).FirstOrDefault(x => x.Tag == tag);
if(control != null)
control.Text = newText
Var-control=GetControlsOfType(yourView).FirstOrDefault(x=>x.Tag==Tag);
if(控件!=null)
control.Text=newText
在TableLayoutPanel
类中没有直接的方法。但是每个控件都有子控件的属性集合
该专用集合具有允许按名称获取子项的方法:
var label = tlp.Controls.Find("lable_name", true)[0] as Label;
就我所见,方法Find
返回数组,所以它应该是这样的var label=tlp.Controls.Find(“lable\u name”,true)[0]作为标签
,对吗?我不理解你的方法,GetControlsOfType()
作为参数Control
,但是你写的例子yourViews
(像一个数组)应该是yourView
?但是如果它只是一个控件,那么是哪一个呢?因为实际上我的问题是如何从控件中找到一个控件?
发送包含所有视图的表单/控件的实例