簡體   English   中英

如何響應以編程方式創建的 UI 元素引發的事件?

[英]How can I respond to events raised by programmatically created UI elements?

我正在為一個課程作業創建一個棋盤游戲。 對於電路板,我使用了一些嵌套的 For 循環,它運行在一個 2D 數組中,以在每個方塊上生成一個“空間”對象。

Space 對象包含一個圖片框和有關該空間的一些數據。

如何處理由單擊生成的圖片框引起的事件,而不必為每個空間對其進行硬編碼?

我注意到這個問題似乎解決了這個問題,但它是在 C# 中的,我無法將其轉換為 VB.Net。

編輯:這就是板的生成方式

 Dim board(23, 24) As Space

 Private Sub GenerateBoard()

    Dim spaceSize As New Size(30, 30)
    Dim spaceLocation As New Point
    Dim validity As Boolean

    For Y = 0 To 24
        For X = 0 To 23
            spaceLocation.X = 6 + (31 * X)
            spaceLocation.Y = 6 + (31 * Y)

            If validSpaces(Y).Contains(X + 1) Then
                validity = True
            Else
                validity = False
            End If

            board(X, Y) = New Space(validity, spaceSize, spaceLocation)
            Me.Controls.Add(board(X, Y).imageBox)
            board(X, Y).imageBox.BackColor = Color.Transparent
            board(X, Y).imageBox.BringToFront()
        Next
    Next
End Sub

空間類:

Public Class Space

Dim _active As Boolean
Dim _imageBox As PictureBox

Public Sub New(ByVal activeInput As Boolean, ByVal size As Size, ByVal location As Point)
    _active = activeInput
    _imageBox = New PictureBox
    With _imageBox
        .Size = size
        .Location = location
        .Visible = False
    End With
End Sub

Property active As Boolean
    Get
        Return _active
    End Get
    Set(value As Boolean)
        _active = value
    End Set
End Property

Property imageBox As PictureBox
    Get
        Return _imageBox
    End Get
    Set(value As PictureBox)
        _imageBox = value
    End Set
End Property

Public Sub highlight()
    With _imageBox
        .Image = My.Resources.Highlighted_slab
        .Visible = True
    End With
End Sub
End Class

首先由設計器(文本框,標簽...)創建的所有控件也是由代碼生成的,但是 VisualStudio 為您編寫了這個。 如果您打開設計器文件( yourForm.Designer.vb ),那么您可以看到如何生成控件的所有代碼。

如果你想為你的pictureBox創建一個事件處理程序,那么:

//Initialize control
Private WithEvents _imageBox as PictureBox

然后創建一個事件處理程序方法:

Private Sub imageBox_Click(sender as Object, e as EventArgs)
    //Your code
End Sub

然后在 VB.NET 中,您可以通過兩種方式為事件分配事件處理程序

第一:在創建New PictureBox()后的類構造函數中( New PictureBox() )添加

AddHandler Me._imageBox, AddressOf Me.imageBox_Click

第二:在線我們創建了一個事件處理程序添加下一個:

Private Sub imageBox_Click(sender as Object, e as EventArgs) Handles _imageBox.Click
    //Your code
End Sub

並記住將您的YourForm.Controls.Add(spaceInstance.ImageBox)添加到表單控件YourForm.Controls.Add(spaceInstance.ImageBox)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM