Как я могу получить доступ к массиву меток для 2-й функции, которые были созданы в предыдущей функции? Win Forms App.NET - PullRequest
0 голосов
/ 01 февраля 2020

Я создал массив меток, которые вызываются и помещаются в указанное место на экране (когда я нажимаю кнопку / когда я получаю доступ к этой функции). Как я могу избавиться от этих переменных / надписей с помощью другой кнопки (в другой функции)? Я упоминаю, что в начале я объявил labelarray глобальным.

Public Class MyForm

Dim p_global As Integer
Dim labelarray() As Label

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
...
    p_global = p

    Dim labelarray(p) As Label
    For index As Integer = 0 To p Step 1

        labelarray(index) = New Label With {
            .Name = String.Format("labelpart_", index.ToString),
            .AutoSize = False,
            .Size = New Drawing.Size(scal_Part_Width, scal_Part_Height),
            .BorderStyle = BorderStyle.FixedSingle
        }
...

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    For Index = 0 To p_global Step 1

        labelarray(Index).Dispose()

    Next

End Sub

End Class

Это выдает мне ошибку на labelarray (Index) .Dispose ()"System.NullReferenceException: 'Ссылка на объект не указана установить экземпляр объекта. '"

Может кто-нибудь объяснить мне, пожалуйста, как я могу вызвать те метки, которые я создал в 1-й функции?

РЕДАКТИРОВАТЬ: Очевидно, это работает как очарование , Мне просто нужно было указать значение при вызове глобального arraylabel () -> в arraylabel (999). Я удалил Dim labelarray (p) As Label из локальной функции Button1_Click.

Вот код, который работал для меня

Public Class MyForm

Dim p_global As Integer
Dim labelarray(999) As Label

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
...
    p_global = p

    For index As Integer = 0 To p Step 1

        labelarray(index) = New Label With {
            .Name = String.Format("labelpart_", index.ToString),
            .AutoSize = False,
            .Size = New Drawing.Size(scal_Part_Width, scal_Part_Height),
            .BorderStyle = BorderStyle.FixedSingle
        }
... 

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    For Index = 0 To p_global Step 1

        labelarray(Index).Dispose()

    Next

End Sub

End Class

Вопрос: существует ли возможность для инициализации глобальной функции labelarray () локальным вводом? Я пробовал labelarray (p_global), но он выдает ошибку, поэтому я поместил внутрь 999 элементов и надеюсь, что пользователь не превысит этот предел.

...