2015-06-24 2 views
0

У меня есть форма с изображением (по умолчанию черная bg), и у меня есть панель flowlayout внизу. На загрузке формы он проходит через папку с изображениями и создает миниатюру (управление изображением) внутри панели flowlayout. То, что я хочу сделать, - это динамически добавить событие щелчка, чтобы пользователь мог изменить изображение основного изображения с одним из миниатюр.Как получить значение из динамического элемента управления?

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 не работает, потому что «temp» не объявлен в sub 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 

Таким образом, вы избегаете ошибок времени выполнения и исключений с помощью исключающего указателя

Смежные вопросы