Получение известной ошибки «NullReferenceException» при создании формы с динамическими c групповыми ящиками в VB.NET - PullRequest
0 голосов
/ 01 мая 2020

Конечно, я искал все типы форумов, связанных с ошибкой «NullReferenceException», и все они говорят, что мои объекты = ничего, и что мне нужно использовать операнд «new», чтобы он работал. Моя форма динамически, используя групповые ящики, а затем вставляя метки и текстовые поля в каждый групповой ящик. Некоторые текстовые поля необходимо регулярно обновлять, но я не хочу обновлять всю форму без необходимости, поскольку она вызывает мерцание формы при обновлении (я пробовал). Я смог построить свою форму, как правило, используя функцию «new groupbox», но не смог получить доступ к объектам в каждом из групповых блоков после того, как она была построена. Может быть, это как-то связано с тем, что я не сделал индексированный массив из групповых блоков. Перестройка всей формы была моим единственным способом обновить sh отображаемые значения, но, как я уже говорил, это заставляет форму мерцать. Поэтому я попытался создать индексированный массив из групповых блоков, это где я получаю ошибку «NullRefereceException». Я уже объявил мой Gr массив oupbox.

Publi c Shared GrpBox как GroupBox ()

Вот мой код на данный момент:

Для j как целое число = 0 Для термостатов. Количество - 1

        Dim ThermostatName As String
        Dim Model As String
        Dim IPAddress As String

        With Thermostats(j)

            ThermostatName = .ThermostatName
            Model = .Model
            IPAddress = .IPAddress

        End With

        GrpBox(j) = New GroupBox() With {                        
            .Location = New Point(265, 27),
            .Size = New Size(253, 176),
            .Text = ThermostatName,
            .BackColor = Color.White,
            .FlatStyle = BorderStyle.Fixed3D,
            .BackgroundImage = Imagelist1.Images(0),
            .Margin = New Padding(20, 30, 0, -10)
            }

        GrpBox(j).Controls.Add(New Label() With {
            .Location = New Point(146, 65),
            .AutoSize = True,
            .Text = "Heat To",
            .Font = New Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular),
            .Visible = True
        })

        GrpBox(j).Controls.Add(New Label() With {
            .Location = New Point(210, 80),
            .AutoSize = True,
            .Text = TempUnit,
            .Font = New Font(FontFamily.GenericSansSerif, 12, FontStyle.Bold),
            .Visible = True
        })

        GrpBox(j).Controls.Add(New Label() With {
            .Location = New Point(146, 110),
            .AutoSize = True,
            .Text = "Cool To",
            .Font = New Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular),
            .Visible = True
        })

        GrpBox(j).Controls.Add(New Label() With {
            .Location = New Point(210, 125),
            .AutoSize = True,
            .Text = TempUnit,
            .Font = New Font(FontFamily.GenericSansSerif, 12, FontStyle.Bold),
            .Visible = True
        })

        GrpBox(j).Controls.Add(New Label() With {
            .Location = New Point(15, 66),
            .Size = New Size(125, 15),
            .Text = "Current Temperature",
            .Font = New Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular),
            .Visible = True
        })

        GrpBox(j).Controls.Add(New Label() With {
            .Location = New Point(90, 80),
            .AutoSize = True,
            .Text = TempUnit,
            .Font = New Font(FontFamily.GenericSansSerif, 24, FontStyle.Bold),
            .Visible = True
        })

        GrpBox(j).Controls.Add(New Label() With {
            .Location = New Point(20, 20),
            .AutoSize = True,
            .Text = Model,
            .Font = New Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular),
            .Visible = True
        })

        Dim TxtCool As New TextBox() With {                              
           .Location = New Point(150, 125),
           .Size = New Drawing.Size(60, 25),
           .Visible = True,
           .Enabled = False,
           .BackColor = Color.White,
           .ForeColor = Color.Black,
           .BorderStyle = BorderStyle.FixedSingle,
           .Font = New Font(FontFamily.GenericSansSerif, 12, FontStyle.Bold),
           .Text = 23.0                                                '
       }
        GrpBox(j).Controls.Add(TxtCool)

        Dim TxtHeat As New TextBox() With {                             
            .Location = New Point(150, 80),
            .Size = New Size(60, 25),
            .Visible = True,
            .Enabled = False,
            .BackColor = Color.White,
            .ForeColor = Color.Black,
            .BorderStyle = BorderStyle.FixedSingle,
            .Font = New Font(FontFamily.GenericSansSerif, 12, FontStyle.Bold),
            .Text = 20.5                                                   
        }
        GrpBox(j).Controls.Add(TxtHeat)

        Dim TxtActualTemp As New TextBox With {                         
            .Location = New Point(19, 82),
            .Size = New Drawing.Size(75, 45),
            .Visible = True,
            .Enabled = False,
            .BackColor = Color.White,
            .ForeColor = Color.Black,
            .BorderStyle = BorderStyle.FixedSingle,
            .Font = New Font(FontFamily.GenericSansSerif, 24, FontStyle.Bold),
            .Text = (6 * Rnd() + 19)                                 
        }
        GrpBox(j).Controls.Add(TxtActualTemp)

        Me.TblLytPnl.Controls.Add(GrpBox(j))

    Next
...