0

長い検索の後、ハングマン ゲームの一部のコードをクリーンアップするための勝利戦略を最終的に見つけましたが、説明が必要なので理解できました。

ゲームを開いたとき、最初はすべての文字ボタンを無効にしたかったのです。だから私はまさにそれを行う方法を作成しました、

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();
  }
}

しかし、これらの新しく作成された文字列をこのようにボタン フォームとして使用できなかったため、課題はまだ始まったばかりのように見えました。

i.ToString().Enabled = false;

明らかな理由で。それらはひもでしたが、元の形として理解する必要がありました。

長い検索の結果、最終的に解決策が明らかになりましたが、それが何をしているのかよくわかりません。魔法は、

Controls[allLetters].Enabled = false;

「コントロール」は、「コントロール内に含まれるコントロールのコレクションを取得する」という謎めいたものを明らかにします。コードは計画どおりに機能しますが、「A から Z まで作成した新しい文字列を取得して、ボタンの名前として元々あったものとして理解してください」と言っているように見えます。

誰かがこのコードが何をしているかを簡単に説明できれば、私は感謝します.

4

2 に答える 2

1

LINQ を使用すると、次のようなこともできます...

// where alphabet is a List<Char>
alphabet.ForEach(c => this.Controls[c].Enabled = false);
于 2013-10-09T21:33:40.890 に答える
0

最終的なコードは、変数とはまったく関係ありません。Aコントロールを表す変数がありますが、フォーム内にはすべてのControlオブジェクトを含む完全に別のコレクションもあります。これらのコントロール オブジェクトにはそれぞれNameフィールドがあり、そのうちの 1 つは文字列値"A". そのコレクション内の名前の値を持つオブジェクトを簡単に見つけることができます"A"。そのコントロールを参照するという名前の変数がたまたまあるAのは、(コンピューターの観点からは) 偶然です。変数の名前を変更した (ただし、コントロールの名前は変更していない)場合は、コレクションを使用してコントロールを取得するため"A1"に使用する必要があります。"A"Controls

于 2013-08-15T17:41:32.103 に答える