VB.NET Изменение видимости нескольких меток во время выполнения

#arrays #vb.net #label #runtime

#массивы #vb.net #метка #время выполнения

Вопрос:

я пытаюсь изменить видимость разных меток во время выполнения после нажатия кнопки

     Dim labelsEmpty As New ArrayList

    Dim allTxt As New List(Of Control)
    For Each txt As TextBox In FindControlRecursive(allTxt, Me, GetType(TextBox))
        If txt.Text = "" Then
            If txt.Name = "TextBox1" Then
            Else
                'Dim textBoxName = txt.Name.ToString.Remove("txt").ToLower
                labelsEmpty.Add(txt.Name.ToString.Replace("txt", "lblMsg"))
            End If
        End If
    Next

    For Each label In labelsEmpty

        Dim Label1 As New Label
        Label1.Name = label
        Label1.Text = "Insert a value"
        Label1.Visible = True

    Next
 

Это то, что у меня есть, каждое текстовое поле в моей форме имеет метку, используемую для сообщения пользователю о том, что произошла какая-то ошибка, в этом случае мне нужно получить, какое текстовое поле оставлено пустым, и установить видимость его метки на true (уже скрытую от запуска формы), так что я делаюя просматриваю каждое текстовое поле в своей форме, чтобы увидеть, какое из них пользователь оставил пустым, а затем беру их имя (например: txtAge) и заменяю txt на «lblMsg», а затем вставляю их в массив.

При этом я получаю массив со всеми именами меток, для которых должно быть установлено значение visible = true

Теперь мне нужно установить их видимость и текстовое значение, поэтому я создал цикл для каждого цикла и получил каждую метку в массиве, но код, который я использовал, не работает, я уже проверил, есть ли элементы в массиве, и они есть, любая помощь? Спасибо.

Моя форма: https://i.stack.imgur.com/qrawz.png

Ответ №1:

В последнем цикле вы создаете новые метки и никогда не добавляете их в свою форму. Если у вас уже есть существующие метки в вашей форме, вы хотите ссылаться на них:

     For Each label In labelsEmpty

        With Controls(label)
            .Text = "Insert a value"
            .Visible = True
        End With

    Next
 

Установка свойства Text может оказаться ненужной, если в ваших метках уже есть необходимый текст.

Если вы хотите создать новые метки, а затем добавить их в свою форму, вам необходимо добавить элемент управления в форму после ее создания:

     For Each label In labelsEmpty

        Dim Label1 As New Label
        With Label1
            .Name = label
            .Text = "Insert a value"
            '.Top = 100
            '.Left = 100
            .Visible = True
        End With
        Controls.Add(Label1)

    Next
 

Если вы сделаете это таким образом, вам понадобится какой-то способ установить свойства Top и Left, чтобы метки правильно совпадали с существующими текстовыми полями. Есть несколько способов сделать это, но я оставлю это вам, поскольку я уверен, что мое первое решение отвечает на ваш вопрос.

Комментарии:

1. Первое решение — это то, что я искал, однако оно не работает, поскольку мой arraylist содержит строки, которые являются именами меток, для которых должно быть установлено значение visible, а не сам объект label, что выдает мне эту ошибку: «Переменная объекта или с переменной блока не установлена»

2. Controls() принимает строку в качестве аргумента. Вы уверены, что строка, передаваемая в Controls(), является ТОЧНЫМ именем метки, на которую вы пытаетесь ссылаться?

3. Да, 100% Печать первой строки в массиве с примером с меткой в форме: imgur.com/a/3b9YIhG

4. я изменил arraylist на список строк следующим образом: Dim labelsEmpty Как новый список (строки), и теперь ошибка «$ W0 ничего не значил» при выполнении. Текст = «Вставить значение». Я мог бы просто отбросить эту идею меток

5. Мне говорят перенести это в чат, но у меня недостаточно высокая репутация, чтобы сделать это — итак: вы получаете имена из TabControl. TabPages (2).Элементы управления, но затем пытаетесь найти их с помощью поиска в основной форме. Их там нет! Они находятся на вкладке (2). Ваш второй цикл должен быть с TabControl. Страницы тегов (2).Элементы управления (метка)