2014-12-15 3 views
0

Я использую VB 2010Во время выполнения создавать и перемещать PictureBox

Я пытаюсь создать программу, в которой во время выполнения я могу создать новый PictureBox с MouseDown, а затем иметь возможность перемещать каждое PictureBox созданного. Мне кажется, что я рядом, может ли кто-нибудь помочь мне?

Private Sub PictureBox2_Mousedown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox2.Click 
    Dim newPictureBox As New PictureBox 

    newPictureBox.Image = Image.FromFile("C:\Users\Blair\Desktop\table8.jpg") 
    newPictureBox.Visible = True 
    newPictureBox.Top = 0 
    newPictureBox.Width = 200 
    newPictureBox.Height = 200 
    newPictureBox.Left = 100 
    newPictureBox.BringToFront() 
    newPictureBox.SizeMode = PictureBoxSizeMode.StretchImage 

    If IsDragging Then 
     Dim EndPoint As Point = newPictureBox.PointToScreen(New Point(e.X, e.Y)) 
     IsClick = False 
     newPictureBox.Left += (EndPoint.X - StartPoint.X) 
     newPictureBox.Top += (EndPoint.Y - StartPoint.Y) 
     StartPoint = EndPoint 
     LastPoint = EndPoint 
    End If 


    'add control to form 
    Controls.Add(newPictureBox) 

End Sub 

Проблема: PictureBox населяет, но он не имеет возможность перемещать/перетащить на MouseDown

+0

поэтому что не работает? – Plutonix

+0

После того, как картинка видна, она не перетаскивается/перемещается на mousedown – Stevenson

+0

Проверьте это: http://stackoverflow.com/questions/10662363/how-to-move-a-control-on-mousemove-in-runtime и http : //www.codeproject.com/Tips/709121/Move-and-Resize-Controls-on-a-Form-at-Runtime-With. – Neolisk

ответ

1

Это может или не может быть именно то, что вы ищете, как он не использует все ваши исходные переменные, но я принял удар по созданию простого примера для вас. Чтобы проверить это, просто создайте новую пустую форму (Form1) и без добавления каких-либо элементов управления просто скопируйте/вставьте этот код поверх кода формы и запустите его.

Если вы щелкните в любом месте формы, он создаст новый графический ящик, и вы сможете перемещать его с помощью мыши, пока вы удерживаете левую кнопку мыши. Когда вы отпустите левую кнопку мыши, он перестанет перемещать PictureBox и вы можете:

а) нажмите на другой пустое пространство на форме, чтобы создать новый PictureBox и переместить его, где вы хотите или,

b) вы можете щелкнуть по одному из существующих ранее созданных фотобарабанов и перенести его в другое место.

Комментарии включены, чтобы помочь вам лучше понять, как это работает.

Public Class Form1 
    Dim oDragPoint As Point = Nothing 
    Dim oCurrentPictureBox As PictureBox = Nothing 

    Private Sub Event_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown 
     If TypeOf sender Is PictureBox Then 
      ' Move existing picturebox 
      oCurrentPictureBox = sender 
      oCurrentPictureBox.BringToFront() 
      oDragPoint = New Point(e.X, e.Y) 
     Else 
      ' Create a new picturebox 
      oCurrentPictureBox = New PictureBox 

      oCurrentPictureBox.Image = Image.FromFile("C:\Users\Blair\Desktop\table8.jpg") 
      oCurrentPictureBox.Location = Me.PointToClient(Windows.Forms.Cursor.Position) 
      oCurrentPictureBox.Width = 200 
      oCurrentPictureBox.Height = 200 
      oCurrentPictureBox.SizeMode = PictureBoxSizeMode.StretchImage 

      ' Add events to the new picturebox we just created so that it can be moved again later 
      AddHandler oCurrentPictureBox.MouseDown, AddressOf Event_MouseDown 
      AddHandler oCurrentPictureBox.MouseMove, AddressOf Event_MouseMove 
      AddHandler oCurrentPictureBox.MouseUp, AddressOf Event_MouseUp 

      ' Add picturebox to form 
      Me.Controls.Add(oCurrentPictureBox) 

      ' Bring picturebox to front after it has been added to the form to ensure it is on top of all other controls in the controls collection 
      oCurrentPictureBox.BringToFront() 
     End If 
    End Sub 

    Private Sub Event_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove 
     If oCurrentPictureBox IsNot Nothing Then 
      ' Move picture box wherever the mouse moves 
      Dim oMouseCursorPoint As Point = Me.PointToClient(Windows.Forms.Cursor.Position) 
      oCurrentPictureBox.Location = New Point(oMouseCursorPoint.X - oDragPoint.X, oMouseCursorPoint.Y - oDragPoint.Y) 
     End If 
    End Sub 

    Private Sub Event_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp 
     ' Drop picturebox and stop moving it around 
     oCurrentPictureBox = Nothing 
     oDragPoint = Nothing 
    End Sub 
End Class 
0

Приятный ответный пример. при создании динамически, как только вы добавили требуемые дескрипторы, то есть файл picturebox1_click-.click где-нибудь после создания объекта, вы можете делать все, что хотите. поэтому, если вы хотите, чтобы картинка была кликабельной и подвижной, используйте обработчики событий , так вот public sub picturebox_click (sender as object, e as eventargs) делать то, что вы хотите делать, когда пользователь нажимает на картинку. dim p as picturebox = trycast (отправитель, картинка) отсюда вы можете подключить его. когда пользователь нажимает p = отправитель и т. д. таким образом, любое изображение, которое они нажимают, является тем, которое будет перемещаться или делать что угодно, чтобы показать пользователю, что они над изображением, которое нужно щелкнуть, вы можете добавить borderstyle borderstyle = bordrstyle.3dfixed как пример, затем в событие click, которое вы создали, у вас есть borderstyle = borderstyle.none, это позволяет им знать, что изображение находится под мышью. во всяком случае я Макин что-то прямо сейчас, что делает это так хотел поделиться тем, что я обнаружил, как Learnerguy

Вот пример, я использую Dim кастрюлю в качестве новой панели pan.Name = «Панель» & Convert.ToString (кол-во)

pan.BackColor = Color.Black 
    AddHandler pan.MouseEnter, AddressOf pan_MouseEnter 
    AddHandler pan.Click, AddressOf pan_Click 
    AddHandler pan.MouseDown, AddressOf pan_MouseDown 
    AddHandler pan.MouseMove, AddressOf pan_MouseMove 
    AddHandler pan.MouseUp, AddressOf pan_MouseUp 

    Form2.Panel1.Controls.Add(pan) 
    Dim gdonopen As New OpenFileDialog 
    gdonopen.ShowDialog 
    pan.BackgroundImage = Image.FromFile(gdonopen.FileName) 
    pan.BackgroundImageLayout = ImageLayout.Stretch 
    objCtrl = pan 

добавить необходимые события, и это даст вам панель с подвижным панельным переключателем с возможностью щелчка. Наслаждайтесь своим дневным программистом! -Learnerguy

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