【问题标题】:set visibility in forloop在 for 循环中设置可见性
【发布时间】:2021-03-22 14:00:28
【问题描述】:

我有一个关于 for 循环和将 numericupdowns 的可见性设置为 true 的问题。这就是我想要完成的:

nud1.Visible = true;
nud2.Visible = true;
nud3.Visible = true;
nud4.Visible = true;
nud5.Visible = true;
nud6.Visible = true;
nud7.Visible = true;
nud8.Visible = true;

这就是我尝试的方式:

for (int i = 0; i < 8; i++) {
  nud[i].Visble = true;
}

这可能吗?如果可以,怎么做?

【问题讨论】:

  • 如果nud8等是控件,那么看索引窗体上的控件集合。您可以将控件名称作为字符串进行索引。
  • 您可以将它们放在一个List、一个数组或一个字典中。但是 C# 不是脚本语言,所以不能像你那样构造变量名..

标签: c# visual-studio for-loop


【解决方案1】:

将您的控件放入数组中。

var controls = new Control[] { nud1, nud2, nud3, nud4, nud5, nud6, nud7, nud8 };

foreach (var c in controls)
{
    c.Visible = true;
}

【讨论】:

  • 当有疑问时(意味着总是)更喜欢 List 而不是数组 ;-)
  • 我认为“当有疑问时,使用ToList() 而不是ToArray”是个好建议,因为它会导致在许多地方分配更少。但这并不意味着您应该在创建自己的数组时更喜欢 List&lt;T&gt;
【解决方案2】:

您可以使用父控件的Controls[name]

for (int i = 0; i < 8; i++ )
{
     Controls[$"nud{i}"].Visble = true;
}

【讨论】:

  • 假设父级没有其他控件。或者将 Linq 与 where 和/或 typeof 子句一起使用..
  • 它接受控件名称,因此是否有其他控件无关紧要
  • 如果nud9 控件在面板中,您的解决方案将无法访问它。
猜你喜欢
  • 2019-02-02
  • 1970-01-01
  • 2019-01-23
  • 2013-03-01
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
相关资源
最近更新 更多