| よねKEN さん、ありがとうございます。
>>実体を宣言する前に追加を行うと、コンパイルは通るのですが、ラベルは表示されませんでした。 > > "ラベルのインスタンス生成を行う前にパネルにそのラベル用の変数を追加する"、という意味でしょうか? > こういう意味であれば、表示されないのは当然の結果ですね。 > 元のコードで言うと、 > Panel1.Controls.AddRange(this.Lb) > とする際に配列Lbの個々の要素がnullなので何も追加していないということになりますから。 > (nullを追加したら例外が起きそうな気もしますが、私は未確認です。)
はい、このような流れのコードを記載して試したところ、表示されませんでした。 コンパイルも通り、例外は発生していませんでした。
>>#パネルの下に入り込んだ様です。 > > 説明通りであれば、パネルの下に入り込んだわけではないはずです。
見えていないので入り込んだと思っていましたが、違ったのですね。 納得です。
>>実体の宣言時にラベルに付けていたthisを外してみましたが、状況は変わりませんでした。 > > 「ラベルに付けていたthis」を外すの意味がわかりません。
Lbの前にthisを付けて、this.Lbでコードを記載していました。 これだと、フォーム上のLbという意味になると思ったのではずしてみました。
> 作成されたソースコードを見ていない状態でこの説明では理解できないので、 > 該当箇所の実際のソースコードを提示してください。 > (■34467 で提示されているソースコードも実際のソースコードでは、重要な部分が端折られていてアドバイスが難しいです。)
配列の宣言は、関数の外で行っています。 protected System.Windows.Forms.Label[] Lb; 実体の作成は、作成用の関数を作成し、その中で行っています。 Lb = new System.Windows.Forms.Label[64]; for (i = 0; i < Lb.Length; i++) { //インスタンス作成 Lb[i] = new System.Windows.Forms.Label(); //プロパティ設定 Lb[i].Name = "Lb" + i.ToString(); Lb[i].Size = new Size(29, 36); Lb[i].Location = new Point(i * 30, 10); Lb[i].Visible = true; //イベントハンドラに関連付け Lb[i].Click += new EventHandler(this.LB_Click); } //フォームにコントロールを追加 Panel1.Controls.AddRange(Lb); 以上が、実際のソースです。 Panel1.Controls.AddRange(Lb);をControls.AddRange(Lb);に変更するとイベントは取得できます。 |