C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.34491 の関連記事表示

<< 0 >>
■34491  Re[4]: パネルコントロールに配置したラベルのクリックイベントの取得
□投稿者/ tamaboyo -(2009/03/31(Tue) 10:39:02)
    よね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);に変更するとイベントは取得できます。
記事No.34467 のレス /過去ログ60より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -