投稿者 ロト君  (社会人) 投稿日時 2021/12/18 11:16:46
色々調べてみましたら、自作クラスを通った後にエラーになってるようです。

自作クラスで、
Public Property Form_Name As New Form
という物を使っていますが、New Formで設定した場合。
Form_Name をClose() しないといけませんか??

下記のようなものです。




Imports System.Data.OleDb

Public Class ComboBox_Set

    Public Property Select_Table_Name As String
    Public Property Select_Name As String
    Public Property ComboBox_Name As String
    Public Property resultDt As New DataTable
    Public Property Form_Name As New Form

    Sub New()

        Select_Table_Name = Nothing
        Select_Name = Nothing
        ComboBox_Name = Nothing
        resultDt.Clear()

    End Sub

    Public Sub Clear()

        Select_Table_Name = Nothing
        Select_Name = Nothing
        ComboBox_Name = Nothing
        resultDt.Clear()

    End Sub

    Public Sub Maker()

        Dim db As New Connection_DB

        db.Sql.AppendLine("SELECT")
        db.Sql.AppendLine("t_env.key_name")
        db.Sql.AppendLine(",t_env.ID")
        db.Sql.AppendLine(",t_env.name1")
        db.Sql.AppendLine(",t_env.value1")
        db.Sql.AppendLine(",t_env.sort")
        db.Sql.AppendLine(",t_env.delflg")
        db.Sql.AppendLine("FROM t_env")
        db.Sql.AppendLine("WHERE t_env.delflg = 0")
        db.Sql.AppendLine("AND t_env.key_name ='" & Select_Name & "'")
        db.Sql.AppendLine("ORDER BY")
        db.Sql.AppendLine("t_env.key_name ASC")
        db.Sql.AppendLine(",t_env.sort ASC")

        db.Selecter()
        resultDt = db.resultDt

        Dim ctrl As ComboBox = FindControl(Form_Name, ComboBox_Name)

        'DataTableオブジェクトを用意
        Dim data_table As New DataTable()

        'DataTableに列を追加
        data_table.Columns.Add("ID", GetType(Long))
        data_table.Columns.Add("String_name", GetType(String))
        For i As Integer = 0 To resultDt.Rows.Count Step 1

            '新しい行を作成
            Dim row As DataRow = data_table.NewRow()

            '各列に値をセット
            If i = 0 Then
                row("ID") = 0
                row("String_name") = "未設定"
            Else
                row("ID") = resultDt.Rows(i - 1).Item(3)
                row("String_name") = resultDt.Rows(i - 1).Item(2).ToString
            End If

            'DataTableに行を追加
            data_table.Rows.Add(row)

        Next

        data_table.AcceptChanges()

        ctrl.DataSource = data_table
        ctrl.DisplayMember = "String_name"
        ctrl.ValueMember = "ID"

        'ComboBox のスタイルを指定します
        ctrl.DropDownStyle = ComboBoxStyle.DropDownList
        '先頭のアイテムを表示させる
        ctrl.SelectedIndex = 0

        Clear()

    End Sub



    Public Function FindControl(ByVal hParent As Control, ByVal stName As String) As Control
        ' hParent 内のすべてのコントロールを列挙する
        For Each hControl As Control In hParent.Controls
            ' 列挙したコントロールにコントロールが含まれている場合は再帰呼び出しする
            If hControl.HasChildren = True Then
                Dim hFindControl As Control = FindControl(hControl, stName)

                ' 再帰呼び出し先でコントロールが見つかった場合はそのまま返す
                If Not hFindControl Is Nothing Then
                    Return hFindControl
                End If
            End If

            ' コントロール名が合致した場合はそのコントロールのインスタンスを返す
            If hControl.Name = stName Then
                Return hControl
            End If
        Next hControl

    End Function

End Class