在C#中引用一系列标签

use*_*227 1 c# controls label sequence winforms

我有消息框询问用户是否要重新启动.

if (MessageBox.Show("Restart?", 
      "Restart and Clear", 
       MessageBoxButtons.YesNo) == DialogResult.Yes)
{
    labels.Text="0"
}
Run Code Online (Sandbox Code Playgroud)

而不是"标签"我想使用label1,label2,label3等一直到label60.我可以做label1.Text = label2.Text .... = 0但这需要一段时间.有没有一种简单的方法可以使用for语句?

Say*_*yse 6

我相信你要做的是将每个标签的文本重置为0,如果是这样的话

foreach(Label l in this.Controls.OfType<Label>())
   l.Text = "0";
Run Code Online (Sandbox Code Playgroud)

另外,您应该尝试为控件提供有意义的名称,以便在维护代码时提供帮助

编辑

一种更强大的方法,但为了确保您不重置您不希望更改的文本,您可以创建标签的子类,然后将此类用于可以重置的标签

class ResettableLabel : Label
foreach(ResettableLabel l in this.Controls.OfType<ResettableLabel >())...
Run Code Online (Sandbox Code Playgroud)


Cla*_*edi 5

我会说你可以使用Control.ControlCollection.Find

for (int i = 1; i <= 60; i++)
{
    label = Controls.Find("label" + i.ToString()) as Label;
    label.Text="0"
}
Run Code Online (Sandbox Code Playgroud)

没有测试,但我认为这个Linq版本也应该这样做

Enumerable
    .Range(1, 60)
    .ToList()
    .ForEach(i => (Controls.Find("label" + i.ToString()) as Label).Text = "0");
Run Code Online (Sandbox Code Playgroud)