どうも!リョクちゃです。
今回は、動的に配置したコントロールのイベントの呼び出し方
(ボタンを押した時にイベントを発生させるにはどうしたらいいか?)
について、紹介していきます。
前回、TableLayoutPanel上に動的にコントロールを配置することはできたので、
今回はこれの続きとして、記事を書いていきます。
前回の記事がこちらになります。
目次
TableLayoutPanel
以前にTableLayoutPanelについては下記の記事で紹介をしていました。
その時はTableLayoutPanelの使い方どまりでした。
フォーム画面の作成
まず、最初に以下のフォーム画面を作成します。(※前回の記事で作成しています。)
このフォームを使って、TableLayoutPanelのレイアウトなどを
動的に変更していきたいと思います。
コントロールの配置については下記の表になります。
No | コントロール | 名前 |
---|---|---|
1 | TableLayoutPanel | tlpMain |
実行環境
筆者の実行環境は、
- VisualStudio2019
- Windows 10 64bit
- .Net Framework 4.5.1
になります。
※ Windows7 8 8.1でも動作はできますが、画面デザインの表示が変わるかもしれません。
TableLayoutPanelの設定
今回は、以下の設定をTableLayoutPanelに行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
' 列と行を5個追加 Dim colAndRowNum As Integer = 5 Me.tlpMain.RowCount = colAndRowNum Me.tlpMain.ColumnCount = colAndRowNum ' 追加した行や列がわかりやすいように境界線のスタイルを設定 Me.tlpMain.BorderStyle = BorderStyle.FixedSingle Me.tlpMain.CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset ' 追加した列と行のサイズを変更 Me.tlpMain.ColumnStyles.Insert(0, New ColumnStyle(SizeType.AutoSize)) For col As Integer = 1 To Me.tlpMain.ColumnCount - 1 Me.tlpMain.ColumnStyles.Insert(col, New ColumnStyle(SizeType.Percent, 50)) Next col Me.tlpMain.ColumnStyles.Insert(Me.tlpMain.ColumnCount, New ColumnStyle(SizeType.AutoSize)) Me.tlpMain.RowStyles.Insert(0, New RowStyle(SizeType.AutoSize)) For row As Integer = 1 To Me.tlpMain.RowCount - 1 Me.tlpMain.RowStyles.Insert(row, New RowStyle(SizeType.Percent, 50)) Next row Me.tlpMain.RowStyles.Insert(Me.tlpMain.RowCount, New RowStyle(SizeType.AutoSize)) ' TableLayoutPanelをフォームにドッキングする。 Me.tlpMain.Dock = DockStyle.Fill Me.tlpMain.SetColumnSpan(btnTest, 2) |
TableLayoutPanelに動的にコントロールを追加
TableLayoutPanelにコントロールを追加するには、下記の記述で出来ました。
1 2 3 4 5 6 |
' ボタンの設定 btnTest.Text = "押してください。" btnTest.Font = New Font("メイリオ", 26) btnTest.Dock = DockStyle.Fill btnTest.TextAlign = ContentAlignment.MiddleCenter Me.tlpMain.Controls.Add(btnTest, 2, 2) |
この状態で実行すると、下図の表示になります。
ボタンコントロールをイベント変数として宣言
前回はTableLayoutPanelにコントロールを追加する際は、
関数内にDim コントロール As ***として宣言をしていましたが、
イベントを発生させたい場合は、
関数外のクラス内でグローバル変数として宣言する必要があります。
その際の記述として、以下のようにします。
ボタンコントロールのイベントを発生させる
イベントを発生させるには、例えばボタンの場合は、押した時に動作させたいのであれば
Button.Click()イベントを関数として作成します。
作成方法は以下のようになります。
この方法は静的に配置したコントロールをダブルクリックした際に、
自動生成されるイベントと同じになります。
1 2 3 4 5 6 7 8 |
''' <summary> ''' ボタン押下時発動イベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click ' 押されたときにさせたい処理を追加 End Sub |
今回は、押されたときに以下の処理を追加してみました。
1 2 3 4 5 6 7 8 |
''' <summary> ''' ボタン押下時発動イベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click MessageBox.Show("Hello") End Sub |
実際に実行し、ボタンを押してみると下図のようになります。
このように、動的に配置したコントロールのイベントを発生させることができました。
ボタン以外にもテキストボックスやコンボボックスでも同様の記述で行えます。
参考にアレンジしてみてはいかがでしょうか?
お疲れ様でした。
まとめ
TableLayoutPanelに動的に追加したコントロールの
イベントの呼び出し方(発生させる方法)について紹介していきました。
例えば、何らかの処理で画面が変更される際に動的な手法は使えます。
何かの商品のカテゴリを選択する際の分岐として画面を変更する際にも動的手法は使えます。
初学者、悩まれている方の参考に少しでもなれば嬉しいです。
最後までお読みいただきありがとうございます。
・こちらの書籍を参考にVB.Net勉強しています。