Обратитесь к определенной созданной кнопке - PullRequest
0 голосов
/ 20 апреля 2020

Итак, в моей программе я поместил панель потока и с помощью кнопки добавляю в макет бесконечные новые кнопки (button.name = «button» + i.tostring) [i = i + 1] с другой кнопкой, которую я хочу чтобы скрыть кнопку с i = 3, чтобы button3.hide (), но она не работала, потому что она еще не существует, так как я могу сослаться на кнопку, созданную, когда мне было 3? *

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

При добавлении кнопок в панель FlowLayout вы правильно указали имя. Вы можете использовать это имя для ссылки на кнопку, как показано в Button2.Click.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For i = 1 To 5
        Dim b As New Button
        b.Name = "btn" & i
        b.Text = "btn" & i
        FlowLayoutPanel1.Controls.Add(b)
    Next
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    FlowLayoutPanel1.Controls("btn3").Visible = False
End Sub
0 голосов
/ 20 апреля 2020

Name является свойством класса Control, поэтому каждый элемент управления имеет это свойство. Это не значит, что его нужно устанавливать, поэтому некоторые элементы управления не имеют имени. Когда вы добавляете элемент управления к своей форме в конструкторе, происходит следующее: устанавливается свойство Name И объявляется поле с этим именем. Вот почему, если вы назовете элемент управления Button Button1, вы можете использовать поле Button1 для ссылки на него.

Когда вы создаете элементы управления во время выполнения, конечно, поля нет Вы можете использовать это специальное поле для ссылки на него. Это зависит от вас, чтобы получить ссылку на этот элемент управления, где бы вы ни поместили его, когда вы создали его. Где это зависит от вас, но, если вы добавили его в коллекцию Controls контейнера, это один из вариантов его возврата. Если вы установите свойство Name, вы можете проиндексировать коллекцию Controls с этим именем, чтобы получить его, например,

Dim myButton = DirectCast(myFlowLayoutPanel.Controls("Button" & i), Button)

. Также могут быть другие способы получения этой ссылки. Например, если вы создали свой List(Of Button) и задали Tag каждого Button числом, вы можете сделать это:

Dim myButton = myButtonList.Single(Function(btn) CInt(btn.Tag) = i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...