经过长时间的搜索,我终于找到了在我的刽子手游戏中清理一些代码的获胜策略,但需要解释,所以我理解。
当游戏打开时,我原本希望禁用所有字母按钮。所以我创建了一个方法来做到这一点,
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;
如果有人可以简要解释一下这段代码的作用,我将不胜感激。
答案 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
来获取控件集合。