通过字母表迭代并将新创建的字符串恢复为原始的Button Form

时间:2013-08-15 15:57:01

标签: c# iteration

经过长时间的搜索,我终于找到了在我的刽子手游戏中清理一些代码的获胜策略,但需要解释,所以我理解。

当游戏打开时,我原本希望禁用所有字母按钮。所以我创建了一个方法来做到这一点,

private void disableletters();
{
  A.Enabled = false;
  B.Enabled = false;
         .
         .
         .
  Z.Enabled = false;
}

有效但不是很优雅。因此,迭代字母表来尝试和压缩这些代码似乎是合乎逻辑的。

private void disableLetters()
{
  char alphebetStart = Char.Parse("A");
  char alphabetEnd = Char.Parse("Z");

  for (i = alphabetStart; i <= alphabetEnd; i++);
  {
    string allLetters = i.ToString();
  }
}

但挑战似乎刚刚开始,因为我不能像这样使用这些新创建的字符串作为Button Forms,

i.ToString().Enabled = false;

原因很明显。它们是字符串,但它们需要被理解为它们的原始形式。

长时间的搜索最终揭示了一个解决方案,但我并不完全理解它正在做什么。神奇的是,

Controls[allLetters].Enabled = false;

&#34;控制&#34;揭示了一些神秘的东西,&#34;获取控件中包含的控件集合。&#34;代码按计划工作,但它看起来像是在做什么,&#34;把你创建的新字符串A通过Z并理解它们最初作为按钮的名称。&# 34;

如果有人可以简要解释一下这段代码的作用,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

使用LINQ,你也可以做类似......

// where alphabet is a List<Char>
alphabet.ForEach(c => this.Controls[c].Enabled = false);

答案 1 :(得分:0)

您的最终代码与您的变量无关。虽然有一个表示控件的变量A,但表单中还有一个完全独立的集合,其中包含所有Control个对象。每个控制对象都有一个Name字段,其中一个字符串值为"A"。您可以轻松地找到名称值为"A"的该集合中的对象。恰好有一个名为A的变量引用该控件(从计算机的角度来看)是巧合。如果您将变量(但未更改控件的名称)重命名为"A1"之类的内容,那么您仍然需要使用"A"来使用Controls来获取控件集合。