1

プロジェクトにいくつかのコントロール配列が必要ですが、コードでエラーが発生しています。

通常のコントロール プロパティを指定する方法は次のとおりです (このコードは正常に動作します)。

TextBox stamText = new TextBox()  
{ 
    Location = new Point(15, 50), 
    Text = "55", 
    Width = 30, 
    Height = 30
};

これは私が同じことをしようとしたコードですが、コントロールの配列に対してです

TextBox[] stamText = new TextBox[8]  
{ 
    Location = new Point(15, 50), 
    Text = "55", 
    Width = 30, 
    Height = 30 
};

{} 内の各プロパティの後に「;」というエラーが表示されます。期待されています。

この問題を解決する方法を知っている人はいますか (制御配列のプロパティを与える)?

* * *拡張

さて、私のプログラムは、卓上ロールプレイ中にプレイヤーの統計を追跡する形式です。

たとえば、私がビル、ジム、そして私と同じ部屋にいるとします。

フォームの [プレーヤーを追加] ボタンをクリックすると、プレーヤーが追加され、そのプレーヤーを操作するための一連のコントロールが表示されます。

*AddPlayer Button clicked*
Addplayer()

Public void AddPlayer()
{
*Add a bunch of controls*
 checkbox(i)
 textbox(i)
}
i += 1

これで全員が 10 になりました。だから、全員のスタミナを -10 変更します。

if for i = 0 to players added 
   if checkbox(i) = checked then textbox(i).text = (text - 10)

したがって、for ループを使用して複数の人の統計を一度に変更できるように、それらを配列にする必要があります。

4

2 に答える 2

4

オブジェクトとコレクションの初期化子について混乱しているようです。最初のケースで使用しているオブジェクト初期化子は、次のように機能します。

オブジェクト初期化子を使用すると、コンストラクターを明示的に呼び出すことなく、作成時にオブジェクトのアクセス可能なフィールドまたはプロパティに値を割り当てることができます。

class Cat
{
    // Auto-implemented properties. 
    public int Age { get; set; }
    public string Name { get; set; }
}

Cat cat = new Cat { Age = 10, Name = "Fluffy" };

2 番目のケースで使用するコレクション初期化子は、次のように機能します。

コレクション初期化子を使用すると、IEnumerable を実装するコレクション クラスを初期化するときに、1 つ以上の要素初期化子を指定できます。要素初期化子は、単純な値、式、またはオブジェクト初期化子にすることができます。コレクション初期化子を使用すると、ソース コードでクラスの Add メソッドへの複数の呼び出しを指定する必要がなくなります。コンパイラが呼び出しを追加します。

List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

エラーをスローしている例では、コレクション初期化子を使用して 8 つのテキストボックスの配列を作成していますが、代わりにオブジェクト初期化子を渡しています。に関するエラーが発生する理由は、コレクションに追加するオブジェクトを分離する;ために が使用されているためです。;コンパイラは、コレクションに 8 つのテキスト ボックスが追加され、それぞれが;. これを修正する方法の 1 つを次に示します。

TextBox[] stamText = new TextBox[8]  
{ 
    new TextBox() { Location = new Point(15, 50), Text = "55", Width = 30, Height = 30 },
    new TextBox() { Location = new Point(15, 50), Text = "55", Width = 30, Height = 30 },
    new TextBox() { Location = new Point(15, 50), Text = "55", Width = 30, Height = 30 },
    new TextBox() { Location = new Point(15, 50), Text = "55", Width = 30, Height = 30 },
    new TextBox() { Location = new Point(15, 50), Text = "55", Width = 30, Height = 30 },
    new TextBox() { Location = new Point(15, 50), Text = "55", Width = 30, Height = 30 },
    new TextBox() { Location = new Point(15, 50), Text = "55", Width = 30, Height = 30 },
    new TextBox() { Location = new Point(15, 50), Text = "55", Width = 30, Height = 30 } 
};
于 2012-12-15T20:12:08.843 に答える
1

Ian が言うように、デフォルト以外の値に初期化するときは、各要素を指定する必要があります。あなたがしているのは、配列の「場所、テキスト、幅、および高さ」プロパティを初期化しようとしていますTextBoxが、配列にはそれらのプロパティがありませんTextBox。デフォルト以外の値で配列を「初期化*」したい場合は、次のように for ループを使用するのが最善の方法です。

const int numOfElements = 8;
TextBox[] textBoxArray = new TextBox[numOfElements];

for (int i = 0; i < numOfElements; i++)
{
    textBoxArray[i] = new TextBox()  { Location = new Point(15, 50), Text = "55", Width = 30, Height = 30 };
}

* : これは実際には初期化ではありません。配列を宣言したときに、配列が既定値で既に初期化されているためです。それはもっと「人口を増やす」ことだと思います。

于 2012-12-15T20:27:27.990 に答える