VB6フォーム内のコントロールを名前で探して取得する

スポンサーリンク

VB6 では、フォームの Controls に名前を指定することができます。

サンプルコード

以下にサンプルコードを示します。

VB6.0 以前
    ' エラーをトラップしない
    On Error Resume Next

    ' 現在のフォーム内から、Text1 という名前のコントロールを探す
    Dim cControl As Control
    Set cControl = Me.Controls("Text1")

    ' エラー処理を通常のロジックに戻す
    On Error GoTo 0

    ' 見つかった場合は Text プロパティを表示する
    If Not cControl Is Nothing Then
        If TypeOf cControl Is TextBox Then
            Dim cTextBox As TextBox
            Set cTextBox = cControl
            Call MsgBox(cTextBox.Text)
        End If
    End If

ただし、この方法では見つからなかった場合にエラーとなり、エラー処理を実装するのはちょっと面倒です。以下のようなメソッドを組んだ方が親切と言えるでしょう。

VB6.0 以前
' --------------------------------------------------------------------------------------
'       指定したコントロール内に含まれるコントロールを指定した名前で検索します。
'
' @Param    cForm   検索対象となるフォーム。
' @Param    stName  検索するコントロールの名前。
' @Return           取得したコントロールのインスタンス。取得できなかった場合は Nothing。
' --------------------------------------------------------------------------------------
Public Function FindControl(ByVal cForm As Form, ByVal stName As String) As Control
    Dim cControl As Control

    ' cForm 内のすべてのコントロールを列挙する
    For Each cControl In cForm.Controls
        ' コントロール名が合致した場合はそのコントロールのインスタンスを返す
        If cControl.Name = stName Then
            Set FindControl = cControl
            Exit For
        End If
    Next cControl
End Function

使用例は以下のようになります。

VB6.0 以前
    ' 現在のフォーム内から、Text1 という名前のコントロールを探す
    Dim cFindControl As Control
    Set cFindControl = FindControl(Me, "Text1")

    ' 見つかった場合は Text プロパティを表示する
    If Not cFindControl Is Nothing Then
        If TypeOf cFindControl Is TextBox Then
            Dim cTextBox As TextBox
            Set cTextBox = cFindControl
            Call MsgBox(cTextBox.Text)
        End If
    End If

関連するリファレンス

準備中です。

スポンサーリンク