Как удалить последний добавленный элемент управления? - PullRequest
0 голосов
/ 31 января 2019

Я намеревался отобразить PictureBox в моей форме, когда мышь зависла над другим элементом управления.Затем я хотел использовать отдельное событие, когда мышь покинула элемент управления.Это событие приведет к удалению отображенного PictureBox из элементов управления.Однако, поскольку мои события являются частными подпрограммами, я не могу напрямую получить доступ к имени элемента управления в последнем событии.Решением этой проблемы будет метод, который удаляет последний добавленный элемент управления.Если такого метода не существует или существует альтернативный способ решения этой проблемы, любая помощь будет принята.

Я пытался просто использовать Controls.Remove (), но для этого требуется параметр.Имя элемента управления в виде строки также не работает, так как параметр должен быть самим элементом управления.

Private Sub Tile_MouseEnter(Sender As Object, e As EventArgs)

    Dim CloseUpPic As New PictureBox With {Properties}
    CloseUpPic.Image = Sender.Image
    Controls.Add(CloseUpPic)

    Refresh()

End Sub

Private Sub Tile_MouseLeave(Sender As Object, e As EventArgs)

    Me.Controls.Remove()

End Sub

Программа не будет компилироваться из-за того, что .Remove () нуждается в параметре

Я ожидал, что элемент управления будет создан и отображен, когда мышь войдет в плитку, и прекратит существование, когда мышь покинет плитку.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Для дальнейшего использования у элементов управления есть свойство Tag , которое позволяет хранить все, что угодно.В этом случае вы можете сохранить ссылку на вновь созданный PictureBox.Кроме того, параметр «Отправитель» сообщает вам, какой элемент управления был источником события.Вы можете привести отправителя к элементу управления, а затем сохранить ссылку.Затем в событии отпуска вы можете привести отправителя к элементу управления, применить тег .Tag к элементу управления и, наконец, удалить его:

Private Sub Tile_MouseEnter(Sender As Object, e As EventArgs)
    Dim ctl As Control = DirectCast(Sender, Control)

    Dim CloseUpPic As New PictureBox With {Properties}
    CloseUpPic.Image = Sender.Image
    Controls.Add(CloseUpPic)

    ctl.Tag = CloseUpPic

    Refresh()
End Sub

Private Sub Tile_MouseLeave(Sender As Object, e As EventArgs)
    Dim ctl As Control = DirectCast(Sender, Control)
    Dim ctlToRemove As Control = DirectCast(ctl.Tag, Control)
    Me.Controls.Remove(ctlToRemove)
End Sub
0 голосов
/ 07 февраля 2019

Я решил использовать следующий код для решения своей проблемы:

            For Each Closeup In Controls.OfType(Of CloseUp)

                Controls.Remove(Closeup)

            Next

Я создал новый собственный класс с именем Closeup, который наследовал PictureBox.Затем я прокрутил каждый крупный план в элементах управления (был только один, но этот код работает для нескольких элементов управления) и удалил их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...