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

问题描述 投票:3回答:3

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

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

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

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

c# winforms .net-4.5
3个回答
4
投票

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

EG

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

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);
                }
            }
        }

0
投票

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

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

无论如何,这是代码:

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+&");
© www.soinside.com 2019 - 2024. All rights reserved.