通过部分匹配其名称来查找多个控件

我目前有100多个标签,名称如下:

labelNumber1 labelNumber2 labelNumber3 labelNumber4 .... labelLetter1 labelLetter2 labelLetter3 labelLetter4 .... 

如何找到控件名称中包含“数字”的所有标签? 而不必输入labelNumber1.text =“hello”等。

我已尝试使用外卡进行正则表达式和foreach,但没有成功。 我已经在msdn.microsoft.com上查看了如何在控件中使用正则表达式。

您可以循环遍历窗体的Controls集合,只需检查它包含的所有控件的名称,如“Label”。 或者你可以检查控件是TextBox,Label等的类型。

例如

 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. } } 

您可以过滤控件列表以仅返回标签。 您还需要确保名称大于11个字符。

  List 

我知道这是一个老问题,但我现在在这里,并且:

  • 该问题询问有关搜索多个控件的问题 。 该解决方案实际上适用于任何类型的控制。
  • OP在使用“包含”或正则表达式之间存在冲突。 我投票支持正则表达式! string.Contains对于这种filter来说是一个坏主意,因为“CoolButton”中也有一个“按钮”

无论如何,这是代码:

 public List FindByPattern(string regexPattern) where TControlType:Control { return Controls.OfType() .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