【问题标题】:Hiding Dynamically Created Buttons on click in Visual Basic Forms在 Visual Basic 窗体中单击时隐藏动态创建的按钮
【发布时间】:2020-11-30 19:56:56
【问题描述】:

我目前正在尝试使动态创建的按钮在单击时消失。

我有一个 Private Sub 来处理点击按钮并增加玩家得分。但是,我不知道如何使特定对象消失,因为所有对象都被称为相同的名称,因为它们是由在计时器上设置的相同子例程创建的(每 2 秒创建一个新按钮)。

我已尝试将创建的每个新按钮添加到数组中,但仍在努力让程序确定单击了哪个按钮。

任何帮助将不胜感激。

【问题讨论】:

  • 按钮单击事件处理程序的参数之一应该是sender As Object,它是对被单击按钮的引用。您只需要将其转换为按钮对象,然后设置visible 属性。
  • @Icemanind 感谢您的快速响应,我确实将发件人作为对象参数,但我将如何将其转换为按钮对象呢?这方面很新

标签: vb.net forms


【解决方案1】:

按钮单击事件处理程序的参数之一应该是sender As Object,它是对被单击按钮的引用。您只需要将其转换为按钮对象,将Visible 属性设置为false。这是一个例子:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim b As Button = CType(sender, Button)
    b.Visible = False
End Sub

【讨论】:

  • 效果很好,干杯伙伴真的很感激。
【解决方案2】:

除了@Icemanind 的回答,您实际上可以在一行中完成:

CType(sender, Button).Visible = False

这无需验证即可工作,因为您知道sender 的类型为Button

如果您有多个按钮要处理,您还可以向处理程序添加额外的事件,这样您就不会得到无数个单独的处理程序:

Protected Sub Button_Click(s As Object, e As EventArgs) _
    Handles _
        Button1.Click, Button2.Click, Button3.Click

    CType(s, Button).Visible = False
End Sub

另一种选择是向多个按钮添加相同的处理程序,而不是向处理程序添加按钮:

在表单实例化(Sub New())中:

AddHandler Button1.Click, AddressOf Button_Click
AddHandler Button2.Click, AddressOf Button_Click
AddHandler Button3.Click, AddressOf Button_Click

在Form类代码中:

Protected Sub Button_Click(s As Object, e As EventArgs)

    CType(s, Button).Visible = False
End Sub

最后一种方法适用于动态控件,因为您可以动态添加处理程序:

Dim button As Button
For i As Integer = 0 To 9
    button = New Button With {.Name = $"Button{i}", .Text = $"Button{i}", .Left = 42, .Top = 50 + (i * 30)}
    Me.Controls.Add(button)
    AddHandler button.Click, AddressOf Button_Click
Next i

【讨论】:

  • DirectCast 快一点。
猜你喜欢
  • 2016-03-01
  • 2018-06-11
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
相关资源
最近更新 更多