我目前有100多个标签,名称如下:
labelNumber1
labelNumber2
labelNumber3
labelNumber4
....
labelLetter1
labelLetter2
labelLetter3
labelLetter4
....
如何找到控件名称中包含“Number”的所有标签? 而不必输入labelNumber1.text =“hello”等等。
我尝试使用外卡进行正则表达式和foreach,但没有成功。 我已经在msdn.microsoft.com上查看了如何使用带控件的正则表达式。
答案 0 :(得分:4)
您可以遍历表单的Controls集合,只需检查它包含的每个控件的名称,如“Label”。或者你可以检查控件是TextBox,Label等的类型
E.g。
foreach (Control control in form.Controls)
{
if (control.Name.ToUpper().Contains("[Your control search string here]"))
{
// Do something here.
}
if (control is TextBox) {
// Do something here.
}
}
答案 1 :(得分:0)
您可以过滤控件列表以仅返回标签。您还需要确保名称大于11个字符。
List<Label> allNumberLabels = new List<Label>();
foreach (Label t in this.Controls.OfType<Label>())
{
if (t.Name.Length > 11)
{
if (t.Name.Substring(5, 6).Equals("Number"))
{
allNumberLabels.Add(t);
}
}
}
答案 2 :(得分:0)
我知道这是一个老问题,但我现在在这里,并且:
无论如何,这是代码:
public List<TControlType> FindByPattern<TControlType>(string regexPattern)
where TControlType:Control
{
return Controls.OfType<TControlType>()
.Where(control => Regex.IsMatch(control.Name, regexPattern))
.ToList();
}
用法:
//some regex samples you can test out
var startsWithLabel = $"^Label"; //Matches like .StartsWith()
var containsLabel = "Label"; //Matches like .Contains()
var startsWithLabelEndsWithNumber = "^Label.*\\d+&"; //matches Label8sdf12 and Label8
var containsLabelEndsWithNumber = "Label.*\\d+&"; //matches MyLabelRocks83475, MyLabel8Rocks54389, MyLabel8, Label8
var hasAnyNumber= "^CoolLabel\\d+$"; //matches CoolLabel437627
var labels = FindByPattern<Label>("^MyCoolLabel.*\\d+&");
var buttons = FindByPattern<Button("^AveragelyCoolButton.*\\d+&");