【发布时间】: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