【问题标题】:How can I add events to a PictureBox dynamically created by clicking button VB.NET如何将事件添加到通过单击按钮 VB.NET 动态创建的 PictureBox
【发布时间】:2022-01-09 22:21:05
【问题描述】:

使用文本框添加我动态创建的数字,例如表单中的 5 个图片框,如下所示:

Sub CreateImages()
    Dim pb As New PictureBox
    Dim i As Integer = TextBoxNumberImages.Text
    Dim Z As Integer = 10

    pb.Top = 50
    pb.Left = 50
    pb.Tag = Color.Black
    pb.BackColor = Color.Red

    For i = 1 To i
        pb = New PictureBox
        pb.Width = 120
        pb.Height = 330
        pb.Left += Z
        pb.Tag = False
        pb.Name = "Image" + Str(i)
        pb.BorderStyle = BorderStyle.FixedSingle

        pb.BackColor = Color.Green
        AddHandler pb.Click, AddressOf _Click

        Me.Controls.Add(pb)
        pb.Refresh()
        Z += 125
    Next
End Sub

然后,在创建图片框后,单击每个..使用AddHandler pb.Click, AddressOf _Click 我得到焦点和 3 个按钮来处理当前图片框(只需增加/减少或剪切成两部分),代码如下:

Public Sub _Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim pb As PictureBox = DirectCast(sender, PictureBox)
    Dim selected As Boolean = DirectCast(pb.Tag, Boolean)

         
    Dim d As Integer
    For d = 1 To TextBoxNumberImages.Text
        If pb.Name = "Image" + Str(d) Then
            NOMEPIC = pb.Name
            pb.BackColor = Color.Blue
            '   MsgBox(pb.Location.X & "X")
            '   MsgBox(pb.Location.Y & "Y")
            BtnAdd.Top = pb.Location.Y + 330
            BtnAdd.Left = pb.Location.X
            BtnSub.Top = pb.Location.Y + 330
            BtnSub.Left = pb.Location.X + 40
            BtnNew.Top = pb.Location.Y + 330
            BtnNew.Left = pb.Location.X + 80
            Label1.Top = pb.Location.Y + 360
            Label1.Left = pb.Location.X
            Label1.Text = "Art. " & d
            txtArt.Top = pb.Location.Y + 380
            txtArt.Left = pb.Location.X
        End If
    Next
    BtnAdd.Visible = True
    BtnSub.Visible = True
    BtnNew.Visible = True
    Label1.Visible = True
    txtArt.Visible = True
    pb.Refresh()

现在我想通过 3 个按钮来管理它们(“+”增大尺寸“-”减小尺寸 e cut...)但我不知道如何让图片框聚焦(参与)。

【问题讨论】:

  • 在 CreateIMages 中,在 For 之前初始化一个 PictureBox,然后在 For 内部重新创建。第一个在其位置、标签和颜色设置后被丢弃。所以不要那样做。您可以删除所有这些并将 For 中的分配替换为 Dim pb = New PictureBox()
  • @djv 焦点可能没有视觉指示器,但您可以在代码中设置焦点,然后Me.ActiveControl 将返回该控件。
  • @AndrewMorton 结合您的链接,这可以工作。但是每次单击时按钮都会散焦,这会导致一些非标准行为。但是设置和读取焦点可以通过设置和读取私有变量来代替。
  • @djv 是的,我同意设置一个具有适当范围的变量来记住上次单击哪个图片框可能是一种更明智的方法。

标签: vb.net


【解决方案1】:

只需保留对最后点击的 PictureBox 的引用,然后在按钮处理程序中对其进行操作

Private selectedPictureBox As PictureBox

Private Sub _Click(sender As Object, e As EventArgs)
    selectedPictureBox = DirectCast(sender, PictureBox)
    ' ...
End Sub

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
    If selectedPictureBox Is Nothing Then Exit Sub
    selectedPictureBox.Width += 1
    selectedPictureBox.Height += 1
End Sub

Private Sub btnSub_Click(sender As Object, e As EventArgs) Handles btnSub.Click
    If selectedPictureBox Is Nothing Then Exit Sub
    selectedPictureBox.Width -= 1
    selectedPictureBox.Height -= 1
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2017-11-08
    • 2020-10-04
    相关资源
    最近更新 更多