2015-12-13 8 views
1

Мне интересно, есть ли возможность получить контроль над любым динамически созданным объектом, например PictureBox? То, что я пытаюсь достичь, - это изменить местоположение одного или нескольких PictureBox. Это код, я использую:vb.net изменение местоположения динамически созданного объекта

Public Class Form1 
    Dim MyPictureBox() As PictureBox 
    Dim i As Integer 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     ReDim MyPictureBox(5) 
     i = i + 1 
     Try 
      MyPictureBox(i) = New PictureBox() 
      With MyPictureBox(i) 
       .Name = "PictureBox_" + i.ToString 
       .Visible = True 
       .Image = My.Resources.test 
       .Location = New Point(50 * i, 100) 
       .SizeMode = PictureBoxSizeMode.AutoSize 
       AddHandler .Click, AddressOf SelectPicture 
      End With 
      Controls.Add(MyPictureBox(i)) 
     Catch ex As Exception 
      MsgBox("You cannot create any more pictures") 
     End Try 
    End Sub 
    Private Sub SelectPicture(sender As Object, e As EventArgs) 
     Dim PictureBoxName As String = sender.name 
     If PictureBoxName.Contains("PictureBox_") Then 
      Label1.Text = PictureBoxName.ToString 
     End If 
    End Sub 
    Private Sub Form1_MouseClick(sender As Object, e As MouseEventArgs) Handles Me.MouseClick 
     If e.Button = MouseButtons.Left Then 
      Dim myPictureBox As PictureBox 
      Try 
       With myPictureBox 
        .Name = Label1.Text.ToString 
        .Location = New Point(PointToClient(MousePosition)) 
       End With 
      Catch ex As Exception 
       MsgBox(ex.ToString) 
      End Try 

     End If 
    End Sub 
End Class 

Я действительно застрял с этим, и я понятия не имею, как заставить его работать.

+1

В 'Form1_MouseClick' у вас нет экземпляра' PictureBox' и вы только объявили переменную типа 'PictureBox'. Каков сценарий? Как и какой PictureBox вы хотите изменить? –

+0

Я хочу выбрать один или несколько PictureBox (ов), а затем изменить местоположение, нажав somwhere в форме. – Treno

+0

Или разные слова ... как вы можете видеть, я могу создать до 5 pictureBoxes, и мой вопрос: «Как« переместить/удалить/изменить изображение и т. Д. »Любого из этого pictureBox, у меня нет полной идеи как это сделать. но после щелчка мышью по одному из них метка1 изменит текст на правильное имя (PictureBox_ID), но как я могу «использовать» этот «выбранный» pictureBox? – Treno

ответ

2

У вас есть много вариантов использования. Например, вы можете нажать PictureBox и сохранить его в поле члена вашей формы.

Private SelectedPictureBox As PictureBox 

Private Sub SelectPicture(sender As Object, e As EventArgs) 
    SelectedPictureBox = DirectCast(sender, PictureBox) 
    Label1.Text = SelectedPictureBox.Name 
End Sub 

Затем, если вы хотите, чтобы переместить его:

Private Sub Form1_MouseClick(sender As Object, e As MouseEventArgs) Handles Me.MouseClick 
    If (Not (SelectedPictureBox Is Nothing)) Then 
     SelectedPictureBox.Location = e.Location 
    End If 
End Sub 

Также вы можете найти элементы управления от имени с помощью Me.Controls.Find:

Dim c As Control = Me.Controls.Find("YourControlName", True) 
'Then you can cast the control to the type that you know 
+0

Ты гений, я трачу на это две недели, пытаясь это сделать, или узнай, как это сделать. Спасибо, ты так много. У меня есть еще один вопрос: могу ли я использовать DirectCast для нескольких объектов одного типа? – Treno

+0

Добро пожаловать :) прямой трансляции преобразует только один объект, и вы можете вызывать его несколько раз, чтобы сбрасывать несколько объектов. –

+0

Что мне нужно для этого кода (возможно, будет более понятно :)) Я хочу сделать что-то вроде фотоальбома, который можно распечатать. Я просто не вижу, как пожилые люди перетаскивают каждую картинку отдельно, поэтому для «множественного выбора» я создал прямоугольник обнаружения столкновения, и все, что касается этого прямоугольника, должно быть выбрано и доступно для перемещения ... Честно говоря, я никогда не был создавать или использовать динамически созданные объекты. Можете ли вы, пожалуйста, скажите, как я могу изменить местоположение для 2 или более картинок? – Treno

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