VB 2008中如何为动态创建的PictureBox编写私有子过程?
解决VB 2008动态生成PictureBox的鼠标点击事件绑定问题
动态生成的控件没法直接用Handles语句绑定事件——因为这些控件是运行时才创建的,设计阶段不存在。你需要在创建每个PictureBox的时候,用AddHandler手动把它的MouseClick事件关联到通用的处理过程上。
修改后的Form3_Load代码
在创建每个pb对象后,添加一行绑定事件的代码:
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim t As Integer = 484 Dim i As Integer = 32 Dim ex_picbox(t) As PictureBox Dim zhj As Integer = 0 For b = 1 To t / i For f = 1 To i + 1 Dim pb As New PictureBox ex_picbox(f + b * i - i) = pb ex_picbox(f + b * i - i).Width = 22 'or whatever ex_picbox(f + b * i - i).Height = 23 ex_picbox(f + b * i - i).Top = 367 + f * 29 - 29 'or whatever ex_picbox(f + b * i - i).Image = My.Resources.black ex_picbox(f + b * i - i).SizeMode = PictureBoxSizeMode.StretchImage ex_picbox(f + b * i - i).Name = "PictureBox" & CInt(f) If f = 1 Then Button1.Text = "PictureBox" & CInt(f) End If ex_picbox(f + b * i - i).Left = 367 + (28) * b ' 绑定鼠标点击事件到通用处理过程 AddHandler pb.MouseClick, AddressOf PictureBox_MouseClick Me.Controls.Add(pb) Next Next End Sub
通用鼠标点击事件处理过程
写一个不带Handles的私有子过程,所有动态生成的PictureBox都会触发这个过程:
Private Sub PictureBox_MouseClick(ByVal sender As Object, ByVal e As MouseEventArgs) ' 如需区分点击的是哪个PictureBox,可将sender转换为PictureBox对象 Dim clickedPb As PictureBox = DirectCast(sender, PictureBox) ' 示例:输出被点击控件的名称 MessageBox.Show($"点击了控件:{clickedPb.Name}") ' 你的关闭窗体逻辑 Close() End Sub
补充说明
AddHandler pb.MouseClick, AddressOf PictureBox_MouseClick的作用是将当前创建的pb对象的MouseClick事件,关联到你定义的通用处理过程上。- 如果需要针对不同PictureBox执行不同逻辑,可以通过
sender获取当前控件,再根据它的Name、Tag等属性判断操作。
内容的提问来源于stack exchange,提问作者Yacov Frenkel
相关产品推荐
相关产品推荐

