1

タブコントロールと、テキストボックスとチェックボックスに多くの設定を含むいくつかのタブページを含むフォームがあります。
ユーザーがこのフォームから終了を押すと、データが変更されたかどうかを確認する必要があります。

そのために、入力時にフォームのすべての値の文字列を作成し、終了時にすべての値の文字列と比較することを考えました:

   Private Function getsetupstring() As String

    Dim setupstring As String = ""
    For Each oControl As Control In Me.Controls

        If TypeOf oControl Is CheckBox Then
            Dim chk As CheckBox = CType(oControl, CheckBox)
            setupstring &= chk.Checked.ToString
        End If

        If TypeOf oControl Is TextBox Then
            setupstring &= oControl.Text.Trim.ToString
        End If
    Next

    Return setupstring
End Function

しかし、そのコードはタブページにあるコントロールをループせず、TabControl とフォームの上にあるいくつかのボタンだけをループします。

値を選択できるようにすべてのコントロールを一覧表示するにはどうすればよいですか?

4

1 に答える 1

2

Controlsそれぞれの子ではなく、親コントロールのみが含まれます。すべてのコントロール (親とそれぞれの子) を取得したい場合は、次の行のコードに頼ることができます。

Dim allControls As List(Of Control) = New List(Of Control)
For Each ctr As Control In Me.Controls
    allControls = getAllControls(ctr, allControls)
Next

は次のようgetAllControlsに定義されています。

Private Function getAllControls(mainControl As Control, allControls As List(Of Control)) As List(Of Control)

    If (Not allControls.Contains(mainControl)) Then allControls.Add(mainControl)
    If mainControl.HasChildren Then
        For Each child In mainControl.Controls
            If (Not allControls.Contains(DirectCast(child, Control))) Then allControls.Add(DirectCast(child, Control))
            If DirectCast(child, Control).HasChildren Then getAllControls(DirectCast(child, Control), allControls)
        Next
    End If

    Return allControls

End Function

あなたが持っている他の代替手段は、プロパティがに設定されたControls.Findメソッドに依存しています。searchAllChildrenTrue

于 2013-11-03T10:52:49.047 に答える