VB. NET получить имя элемента управления из кнопки, созданной во время выполнения - PullRequest
0 голосов
/ 10 июля 2020

У меня есть этот код для создания 3 кнопок во время выполнения, который, кажется, работает нормально.

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim rawData As String
        Dim FILE_NAME As String = "C:\temp\test.txt"
        Dim data() As String

        Dim objReader As New System.IO.StreamReader(FILE_NAME)

        Do While objReader.Peek() <> -1
            rawData = objReader.ReadLine() ' & vbNewLine
            data = Split(rawData, ",")
            'data 0 = X loc, data 1 = Y loc, data 2 = Part Num, data 3 = Reference Des

            Dim dynamicButton As New Button
            dynamicButton.Location = New Point(data(0), data(1))
            dynamicButton.Height = 20
            dynamicButton.Width = 20
            dynamicButton.FlatStyle = FlatStyle.Flat
            dynamicButton.BackColor = Color.Transparent
            dynamicButton.ForeColor = Color.FromArgb(10, Color.Transparent)
            'dynamicButton.Text = "+"
            dynamicButton.Name = data(2)
            dynamicButton.FlatAppearance.BorderColor = Color.White
            'dynamicButton.Font = New Font("Georgia", 6)
            AddHandler dynamicButton.Click, AddressOf DynamicButton_Click
            Controls.Add(dynamicButton)
            Dim myToolTipText = data(3)
            ToolTip1.SetToolTip(dynamicButton, myToolTipText)
        Loop

    End Sub

Я хочу получить имя элемента управления, созданное при нажатии кнопки, но я не могу Кажется, я получаю то, что мне нужно. Я делал это в событии dynamicButton_click.

 Private Sub DynamicButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)

        For Each cntrl In Me.Controls
            If TypeOf cntrl Is Button Then

                MsgBox("")
                Exit Sub
            End If
        Next
    End Sub

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Все, что вам нужно сделать, это привести переменную sender к кнопке. Он сообщит вам, какой элемент управления был источником события:

Private Sub DynamicButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim btn As Button = DirectCast(sender, Button)
    MessageBox.Show("You clicked: " & btn.Name)
End Sub
0 голосов
/ 10 июля 2020

Вы прикрепили обработчик событий к кнопке Dynami c, и он нажимает?

Пара способов сделать это:

Это даст вам кнопку, которую вы только что нажали, без необходимости на l oop, отправитель - кнопка. Вам нужно привести его от объекта к кнопке:

MessageBox.Show(DirectCast(sender, Button).Name)

В противном случае внутри вашего l oop приведите cntrl (общий c Control объект) к определенному c Button объект управления, а затем получить имя.

Dim btn as Button = DirectCast(cntrl, Button)
MessageBox.Show(btn.Name)
...