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语句?
我相信你要做的是将每个标签的文本重置为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)
我会说你可以使用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)