忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

標準コントロールのパネルの使い方について(Panel)

フォーム上に各種のコントロールを配置する場合に、パネルを使ってグループ分けを行うことはよくあります。
そこで今回は、の使い方について順を追って説明したいと思います。


■パネル上のコントロールを一括 Enabled/Disabled 設定

フォーム上にパネルを張り付けて、そのパネルの上に5個のテキストボックスを張り付けています。 更にパネルへの処理を行う為に1個のボタンを配置します。

以下のソースを見て下さい。 ボタンのクリックイベントでパネルの Enabled の値を反転しています。
パネルへの Enabled 値を設定することで、パネルの上のコントロールを全て不可設定にできます。 これは結構便利だと思います。

Public Class frmPanel1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'パネルの「Enabled」を反転設定
        Me.Panel1.Enabled = Not (Me.Panel1.Enabled)
    End Sub
End Class

これを実行すると以下の様な表示になります。右側はボタンをクリックしてパネルを Disabled にした状態です。


■パネル上の個別のコントロールの Enabled/Disabled 設定との関係

次は、パネルのテキストボックスの直前にチェックボックスを配置して、デフォルトとして Checked の状態にします。 それぞれのチェックボックスの変化でテキストボックスの許可を設定してやります。

Public Class frmPanel2

    'パネルの「Enabled」を反転
    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Panel1.Enabled = Not (Me.Panel1.Enabled)
    End Sub

    'チェックボックスの「Checked」をパネルの「Enabled」に設定
    Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
        Me.TextBox1.Enabled = Me.CheckBox1.Checked
    End Sub

    Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged
        Me.TextBox2.Enabled = Me.CheckBox2.Checked
    End Sub

    Private Sub CheckBox3_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox3.CheckedChanged
        Me.TextBox3.Enabled = Me.CheckBox3.Checked
    End Sub

    Private Sub CheckBox4_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox4.CheckedChanged
        Me.TextBox4.Enabled = Me.CheckBox4.Checked
    End Sub

    Private Sub CheckBox5_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox5.CheckedChanged
        Me.TextBox5.Enabled = Me.CheckBox5.Checked
    End Sub
End Class

これを実行すると以下の様な表示になります。 右側は1個目と、4個目のチェックボックスをOFFにしてテキストボックスを Disabled にした後で、 ボタンをクリックしてパネルを Disabled にした状態です。

パネルの EnabledDisable にした場合にはパネル上のコントロールの状態のまま不可状態(パネル全体に灰色)になります。 再度ボタンをクリックすれば、元の状態になることが分かります。



■パネル上のテキストボックス一括クリア

上記のフォームにボタンを追加して、そのボタンクリック時の処理として、パネル上のテキストボックスを全てクリアする方法を示します。
パネルにはその上に存在するコントロールを Controls プロパティに持っているので、 それを For Each 文で順次取得し、取得されたテキストボックスに対して処理を行います。

Public Class frmPanel3

    'パネルの「Enabled」を反転
    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Panel1.Enabled = Not (Me.Panel1.Enabled)
    End Sub

    'チェックボックスの「Checked」をパネルの「Enabled」に設定
    Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
        Me.TextBox1.Enabled = Me.CheckBox1.Checked
    End Sub

    Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged
        Me.TextBox2.Enabled = Me.CheckBox2.Checked
    End Sub

    Private Sub CheckBox3_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox3.CheckedChanged
        Me.TextBox3.Enabled = Me.CheckBox3.Checked
    End Sub

    Private Sub CheckBox4_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox4.CheckedChanged
        Me.TextBox4.Enabled = Me.CheckBox4.Checked
    End Sub

    Private Sub CheckBox5_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox5.CheckedChanged
        Me.TextBox5.Enabled = Me.CheckBox5.Checked
    End Sub

    'パネル上のテキストボックスをクリア
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'パネルに貼ってある全てのコントロールを取得
        For Each obj In Me.Panel1.Controls
            If TypeOf obj Is TextBox Then
                'コントロールが TextBox の場合、Textクリア
                DirectCast(obj, TextBox).Text = ""
            End If
        Next
    End Sub

End Class


これを実行すると以下の様な表示になります。 左側は1個目と2個目、4個目のテキストボックスに値を入力した後で、ボタンをクリックしてパネルを Disabled にした状態です。
その後、「Panel 上の TextBox クリア」のボタンをクリックした様子が右側の図となります。

関連する記事

標準コントロールのパネルの使い方について2(複数Panelの表示切替)
パネル上にピクチャボックスを貼付て画像スクロールさせる方法ついて(Panel、PictureBox)











PR

コメント

コメントを書く