2015-06-24 75 views
0

我有一个图片控件的表单(默认为黑色bg),我在下面有一个flowlayoutpanel。在窗体的加载时,它会循环显示一个图像文件夹,并在flowlayout面板内创建一个缩略图(picturecontrol)。我想要做的就是动态添加一个点击事件,让用户用其中一个缩略图改变主画面控制图像。如何从动态控件获取值?

Private Sub TabImageLoad() 
    Dim apppath As String = Application.StartupPath() 
    Dim strFileSize As String = "" 
    Dim di As New IO.DirectoryInfo(apppath + "\images") 
    Dim aryFi As IO.FileInfo() = di.GetFiles("*.*") 
    Dim fi As IO.FileInfo 

    For Each fi In aryFi 
     If fi.Extension = ".jpg" Or fi.Extension = ".jpeg" Or fi.Extension = ".gif" Or fi.Extension = ".bmp" Then 
      Dim temp As New PictureBox 
      temp.Image = Image.FromFile(di.ToString + "\" + fi.ToString) 
      temp.Width = 100 
      temp.Height = 75 
      temp.Name = fi.ToString 
      temp.Visible = True 
      temp.SizeMode = PictureBoxSizeMode.StretchImage 
      AddHandler temp.Click, AddressOf Me.temp_click 
      FlowLayoutPanel1.Controls.Add(temp) 
     End If 
    Next 
End Sub 
Private Sub temp_click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    PictureBox1.Image = temp.Image 
End Sub 

这是我获取图像的子代码(注意addhandler尝试)和链接到addhandler的子代码。正如你可能猜到的那样,addhandler不起作用,因为“temp”没有在temp_click子类中声明。

有什么建议吗?

回答

1

sender参数总是触发的情况下,在这种情况下,控制PictureBox

Private Sub temp_click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    Dim pb As PictureBox = DirectCast(sender, PictureBox) 
    PictureBox1.Image = pb.Image 
End Sub 
+0

谢谢,就是我一直在寻找:) – rmalex

0

我建议你使用:

Private Sub temp_click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
Dim pbDynamic as PictureBox = trycast(sender,Picturebox) 

然后用

if pbDynamic IsNot Nothing Then 
    PictureBox1.Image = pbDynamic.image 
end if 
验证

这样可以避免运行时错误和空指针异常