【问题标题】:VB: Want to test for mouse click events on multiple objects in a panelVB:想要测试面板中多个对象上的鼠标单击事件
【发布时间】:2016-01-22 19:49:18
【问题描述】:

我已经使用自定义类设置了一个生成 72 个图片框的网格。我现在需要检查用户是否点击了这些对象中的任何一个。

图片框类:

Public Class Tile
    Inherits PictureBox
    Public Side As Char
    Public Spawnable As Boolean
    Public Inhabiter As Integer = 000
    Public Sub New(ByVal LeftValue As Integer, ByVal TopValue As Integer)
        With Me
            .Size = New Size(70, 70)
            .BringToFront()
            .Top = TopValue
            .Left = LeftValue
        End With
    End Sub
End Class

这里是制作网格

Sub SetBoard()
    Dim HorizontalCounter, VerticalCounter, TopValue, LeftValue As Integer
    TopValue = 90
    LeftValue = 275
    Do Until VerticalCounter = 6
        Do Until HorizontalCounter = 12
            Dim BoardTile As New Tile(LeftValue, TopValue)
            Tiles.Add(BoardTile)
            Controls.Add(BoardTile)
            Map.Controls.Add(BoardTile)
            LeftValue += 80
            HorizontalCounter += 1
            'If LeftValue < 800 Then BoardTile.Side = "R" Else BoardTile.Side = "B"
            'If LeftValue < 550 Or LeftValue > 1000 Then BoardTile.Spawnable = True Else BoardTile.Spawnable = False
            BoardTile.BackColor = Color.Transparent
            'If BoardTile.Side = "R" Then BoardTile.BackColor = Color.Red Else BoardTile.BackColor = Color.Blue
            'If BoardTile.Spawnable = True Then BoardTile.BackColor = Color.Green
        Loop
        LeftValue = 275
        HorizontalCounter = 0
        TopValue += 80
        VerticalCounter += 1
    Loop
End Sub

【问题讨论】:

  • 什么是“网格”?你画的线还是一些控件?没有太多事情要做
  • AddHandler pb.Click, AddressOf pb_Click。创建Private Sub pb_Click(sender As Object, e As EventArgs)方法,使用sender参数判断点击的是哪个框。
  • 它只是一组以网格格式设置的图片框
  • 试试 Lars 的方法,他有你的解决方案。 @LarsTech,您应该将其作为答案。 :)
  • 有人可以扩展 Lars 的评论吗?我明白了它的概念,但是如何将它应用到我的代码中。

标签: vb.net class oop object


【解决方案1】:

创建处理点击事件的方法:

Private Sub BoardTile_Click(sender As Object, e As EventArgs)
  Dim t As Tile = CType(sender, Tile)
  MessageBox.Show(t.Name)
End Sub

然后,当您创建控件时,连接事件:

Dim BoardTile As New Tile(LeftValue, TopValue)
BoardTile.Name = LeftValue.ToString() & " - " & TopValue.ToString()
AddHandler BoardTile.Click, AddressOf BoardTile_Click

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 2010-11-07
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多