| よねKEN さん、ありがとうございます。
> 変数iが宣言されていませんので、関連するソースコードを正確には抜き出せていないようです。 > それと、各ラベルにTextプロパティを設定している箇所もありません。 > 本当にこの通りのソースコードなんですか? > これだとラベルを視認できないので、Clickイベントが正しく動作するかどうかの確認自体ができないと思います。
すみません。iの宣言が抜けていました。 iは、 関数の頭で int i = 0; で宣言しています。 また、このラベルには文字列は表記しません。 コピーの際に抜けてしまっているのですが、 forの中で Lb[i].BackColor = Color.Gray; を記載しており、色つきのラベルを複数表示させるのが目的です。
> (ちなみにAutoSizeプロパティをfalseに設定するコードもないようなので、 > このままだとSizeプロパティの設定はあまり意味がありません。)
このあと、SetBoundsを使用して、ラベル位置の補正を行っています。 Textを表示しないのと、SetBoundsで指定し直しているので、AutoSizeの設定は必要ないかと思っていました。
> このコードをどこから呼び出しているのか?フォーム上に配置しているコントロールの構成などの > 情報も合わせて、動作検証可能なソースコードを提示された方がよいと思います。
フォームには、はじめパネルとボタンコントロールを配置しています。 フォームを表示する際に、関数Contorol_Loadでラベルを作成し、パネルの上に表示しようとしています。 パネルを載せているフォームは、他のフォーム(親)から呼び出しを行うため、関数Contorol_Loadは、 親フォームでフォームの宣言をした後に呼ぶようにしています。 Contorol_Loadを抜けた後、フォームはShowDialogで親フォームから表示しています。 Contorol_Loadへはラベルの作成個数等の情報を引数で渡していますが、今はデバッグのため、引数は無視して、配列数は64で固定で動かしています。 public void Contorol_Load(int nMax) { int i = 0;
this.SuspendLayout();
Lb = new System.Windows.Forms.Label[64]; for (i = 0; i < Bit.Length; i++) { //インスタンス作成 Lb[i] = new System.Windows.Forms.Label(); //プロパティ設定 Lb[i].Name = "Bit" + i.ToString(); Lb[i].Size = new Size(29, 36); Lb[i].Location = new Point(i * 30, 10); Lb[i].Visible = true; Lb[i].BackColor = Color.Gray; //イベントハンドラに関連付け Lb[i].Click += new EventHandler(this.LB_Click); }
//フォームにコントロールを追加 Panel1.Controls.AddRange(Lb); } |