将数据网格中的值解析为按钮名称

parse value from datagrid to button name

我正在构建一个包含许多按钮的表单,所有按钮都做同样的事情:每次单击时加 1。每个按下的按钮连同它们被按下的时间一起发送到数据网格视图。数据网格值如下所示:

a_1_serv (button name), 18:05:00(time).

有时我想删除最后一行。目前一切正常。

当我删除最后一行时,我想更改按钮的文本(a_1_serv)。

我可以将 dgv 值 (a_1_serv) 解析为一个变量,但我无法将它绑定到适当的按钮名称以便我可以控制它。

有办法吗?

不要将程序状态存储在 UI

创建一个数据结构来保存信息,让DataGridView成为一个“视图”,而不是把它当作一个变量。与使用 UI 作为变量相比,您将省去自己的麻烦。

也就是说,创建一个 class 来表示您的信息

Public Class Data
    Public Sub New(button As Button, time As DateTime)
        Me.Button = button
        Me.Time = time
    End Sub
    <System.ComponentModel.Browsable(False)>
    Public Property Button As Button
    Public ReadOnly Property Text As String
        Get
            Return Button.Name
        End Get
    End Property
    Public Property Time As DateTime
End Class

并且您的代码可以操作 UI 之外的变量中的数据。将数据绑定到DataGridView上显示。

Private datas As New List(Of Data)()

Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click
    addButton(DirectCast(sender, Button))
End Sub

Private Sub RemoveLastButton_Click(sender As Object, e As EventArgs) Handles RemoveLastButton.Click
    removeLast()
End Sub

Private Sub addButton(b As Button)
    datas.Add(New Data(b, DateTime.Now))
    bindData()
End Sub

Private Sub removeLast()
    Dim b = datas.Last.Button
    b.Text = "new text" ' change to whatever
    datas.RemoveAt(datas.Count - 1)
    bindData()
End Sub

Private Sub bindData()
    DataGridView1.DataSource = Nothing
    DataGridView1.DataSource = datas
End Sub

这与您所说的完全一致,但您提供的这两个信息可能不一致:a_1_serv(按钮名称)我想更改按钮的文本...。这会更改按钮文本但不会更改名称。名称显示在网格中。您可以更改数据 class 以显示文本或其他内容。但关键是这种方法将使您的数据远离 UI,您将不再需要按名称查找控件。