【VB.Net】TableLayoutPanelに動的に配置したコントロールのイベントの呼び出し方

どうも!リョクちゃです。

今回は、動的に配置したコントロールのイベントの呼び出し方

(ボタンを押した時にイベントを発生させるにはどうしたらいいか?)

について、紹介していきます。

前回、TableLayoutPanel上に動的にコントロールを配置することはできたので、

今回はこれの続きとして、記事を書いていきます。

前回の記事がこちらになります。

アプリケーション実行時に画面をカスタマイズしたくなるときはありませんか?WindowsフォームアプリケーションのフォームにTableLayoutPanelを配置した状態からTableLayoutPanel内に動的にコントロールを追加する方法を紹介しています。



TableLayoutPanel

以前にTableLayoutPanelについては下記の記事で紹介をしていました。

その時はTableLayoutPanelの使い方どまりでした。

Windowsフォームアプリケーションの画面レイアウトでコンポーネントの配置が整わない、綺麗に配置できないといった悩みはありませんか?そんな時に使える、TableLayoutPanelについて例を交えて紹介しています。初学者の参考になれば。

スポンサーリンク




フォーム画面の作成

まず、最初に以下のフォーム画面を作成します。(※前回の記事で作成しています。)

このフォームを使って、TableLayoutPanelのレイアウトなどを

動的に変更していきたいと思います。

コントロールの配置については下記の表になります。

Noコントロール名前
1TableLayoutPaneltlpMain

実行環境

筆者の実行環境は、

  • VisualStudio2019
  • Windows 10 64bit
  • .Net Framework 4.5.1

になります。

※ Windows7 8 8.1でも動作はできますが、画面デザインの表示が変わるかもしれません。

TableLayoutPanelの設定

今回は、以下の設定をTableLayoutPanelに行います。

TableLayoutPanelに動的にコントロールを追加

TableLayoutPanelにコントロールを追加するには、下記の記述で出来ました。

TableLayoutPanel.Controls.Add(追加したいコントロール、列番号、行番号)
追加するコントロールは事前に、変数としてインスタンスを生成しておく必要があります。

今回は、ボタンコントロールを以下の設定で動的に追加していきます。

この状態で実行すると、下図の表示になります。

ボタンコントロールをイベント変数として宣言

前回はTableLayoutPanelにコントロールを追加する際は、

関数内にDim コントロール As ***として宣言をしていましたが、

イベントを発生させたい場合は、

関数外のクラス内でグローバル変数として宣言する必要があります。

その際の記述として、以下のようにします。

WithEvents 変数名 As New オブジェクト(コントロール)

例えば、今回のボタンオブジェクトを宣言すると、
WithEvents btnTest As New Button
こうすることで動的に追加したコントロールのイベントを発生させることができます。



ボタンコントロールのイベントを発生させる

イベントを発生させるには、例えばボタンの場合は、押した時に動作させたいのであれば

Button.Click()イベントを関数として作成します。

作成方法は以下のようになります。

この方法は静的に配置したコントロールをダブルクリックした際に、

自動生成されるイベントと同じになります。

今回は、押されたときに以下の処理を追加してみました。

実際に実行し、ボタンを押してみると下図のようになります。

このように、動的に配置したコントロールのイベントを発生させることができました。

ボタン以外にもテキストボックスやコンボボックスでも同様の記述で行えます。

参考にアレンジしてみてはいかがでしょうか?

お疲れ様でした。

まとめ

TableLayoutPanelに動的に追加したコントロールの

イベントの呼び出し方(発生させる方法)について紹介していきました。

例えば、何らかの処理で画面が変更される際に動的な手法は使えます。

何かの商品のカテゴリを選択する際の分岐として画面を変更する際にも動的手法は使えます。

初学者、悩まれている方の参考に少しでもなれば嬉しいです。

最後までお読みいただきありがとうございます。

・こちらの書籍を参考にVB.Net勉強しています。

スポンサーリンク