0

ランタイムで生成されたグループボックスでランタイムで生成されたチェックボックス名を変更する際に問題が発生しました。複数のグループボックスを使用していて、データベース内のすべての行を取得して、それらのチェックボックスを作成しています。チェックボックスの名前は次のとおりです""chkClass "&intGroupBoxNumber&intCurrentRow"。グループボックスを削除したら、現在のすべてのグループボックスの番号を付け直します。意味がある場合は、チェックボックスの名前も新しいグループボックスの番号に変更します。私のコードは次のとおりです。

strControlName = "grpGroup" & strIBResult
        Try
            intGroupBoxOldYLocation = Me.Controls(strControlName).Location
            Me.Controls(strControlName).Dispose()
            MessageBox.Show("Deleted: " & strControlName)
            intRenameGroup = strIBResult + 1

            Try
                strControlName = "grpGroup" & intRenameGroup
                strControlNewName = "grpGroup" & intRenameGroup - 1
                Me.Controls(strControlName).Location = intGroupBoxOldYLocation
                Me.Controls(strControlName).Text = "Group " & intRenameGroup - 1
                Me.Controls(strControlName).Name = strControlNewName
                MessageBox.Show("Changed: " & strControlName & " to: " & strControlNewName)

                Do While intCurrentClassRow < intTotalClassRows
                    strCheckBoxOldName = "chkClass" & intRenameGroup & intCurrentClassRow
                    strCheckBoxNewName = "chkClass" & intRenameGroup - 1 & intCurrentClassRow
                    MessageBox.Show("Renaming: " & strCheckBoxOldName & " to: " & strCheckBoxNewName)
                    Me.Controls(strCheckBoxOldName).Name = strCheckBoxNewName
                    intCurrentClassRow += 1
                    MessageBox.Show("Renamed: " & strCheckBoxOldName & " to: " & strCheckBoxNewName)
                Loop

                intCurrentClassRow = 0
                intRenameGroup += 1
                intGroupBoxNewYIncrement = intGroupBoxOldYLocation.Y + Me.Controls(strControlNewName).Height + 50

                Do
                    strControlName = "grpGroup" & intRenameGroup
                    strControlNewName = "grpGroup" & intRenameGroup - 1
                    Me.Controls(strControlName).Location = New Point(intCurrentXPosition, intGroupBoxNewYIncrement)
                    Me.Controls(strControlName).Text = "Group " & intRenameGroup - 1
                    Me.Controls(strControlName).Name = strControlNewName

                    Do While intCurrentClassRow < intTotalClassRows
                        strCheckBoxOldName = "chkClass" & intRenameGroup & intCurrentClassRow
                        strCheckBoxNewName = "chkClass" & intRenameGroup - 1 & intCurrentClassRow
                        Me.Controls(strCheckBoxOldName).Name = strCheckBoxNewName
                        intCurrentClassRow += 1
                        MessageBox.Show("Renamed: " & strCheckBoxOldName & " to: " & strCheckBoxNewName)
                    Loop

                    intCurrentClassRow = 0
                    intRenameGroup += 1
                    intGroupBoxNewYIncrement = intGroupBoxNewYIncrement + Me.Controls(strControlNewName).Height + 50
                Loop

            Catch ex As Exception
                MessageBox.Show("Control: " & strControlName & " does not exist")
                MessageBox.Show(ErrorToString)
            End Try

        Catch ex As Exception
            'MessageBox.Show("Control: " & strControlName & " never existed")
            MessageBox.Show("Please enter a valid group number to delete.", "Invalid Entry")
            Exit Sub
        End Try 

私の問題はMe.Controls(strCheckBoxOldName).Name=strCheckBoxNewNameにあると確信しています。

エラーは次のとおりです:「オブジェクト参照がオブジェクトのインスタンスに設定されていません」

そのランタイムで生成されたグループボックスを参照する別の方法はありますか?

ありがとう。これが混乱している場合は申し訳ありません!

4

2 に答える 2

1

フォームのControlsコレクションには、フォームに直接配置された最上位のコントロールのみが含まれます。コントロールを などのコンテナー コントロールに読み込む場合は、そのコンテナー コントロールのコレクション GroupBoxでそれを見つける必要があります。Controls

したがって、これを行う代わりに:

Me.Controls(strCheckBoxOldName).Name = strCheckBoxNewName

あなたはこのようなことをしているはずです:

Me.Controls(strControlName).Controls(strCheckBoxOldName).Name = strCheckBoxNewName
于 2012-11-28T17:41:34.593 に答える
0

try/catch ブロックを一時的にコメントアウトします。そうすれば、問題のあるステートメントでアプリケーションが中断し、問題がどこにあるかを「かなり確実」にする必要はありません。次に、関連する変数の値を確認します (強調表示、shfit-F9)。おそらく、オブジェクトの 1 つの値が何もないことに気付くでしょう。これにより、前述のエラー メッセージが表示されます。

于 2012-11-28T17:39:56.620 に答える