通过部分匹配其名称

时间:2016-03-11 22:03:05

标签: c# winforms .net-4.5

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

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

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

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

3 个答案:

答案 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)

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

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

无论如何,这是代码:

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+&");
相关问题