2015-12-04 4 views
0

В настоящее время я пытаюсь упростить инструмент, который мы используем на работе. Для этого я хотел бы использовать метод перетаскивания. Инструмент в основном похож на строительство башни с использованием трех различных блоков. В верхней части находятся три изображения различных блоков ниже - панель раскладки потока. Цель состоит в том, чтобы перетащить требуемый порядок блоков в панель раскладки потока.vb.net Использование операции перетаскивания с использованием изображений

Вот краткое изображение, которое будет представлять начальную позицию. (Просто чтобы быть ясным.) enter image description here

Это для меня сложная часть. Я использовал метод перетаскивания для удаления значений из одного текстового поля в другой. Теперь мне нужно скопировать объект изображения и добавить его в панель раскладки потока.

Это метод, который я следовал перетаскивать значения

Private MouseIsDown As Boolean = False 

Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As _ 
System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown 
    ' Set a flag to show that the mouse is down. 
    MouseIsDown = True 
End Sub 

Private Sub TextBox1_MouseMove(ByVal sender As Object, ByVal e As _ 
System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove 
    If MouseIsDown Then 
     ' Initiate dragging. 
     TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy) 
    End If 
    MouseIsDown = False 
End Sub 

Private Sub TextBox2_DragEnter(ByVal sender As Object, ByVal e As _ 
System.Windows.Forms.DragEventArgs) Handles TextBox2.DragEnter 
    ' Check the format of the data being dropped. 
    If (e.Data.GetDataPresent(DataFormats.Text)) Then 
     ' Display the copy cursor. 
     e.Effect = DragDropEffects.Copy 
    Else 
     ' Display the no-drop cursor. 
     e.Effect = DragDropEffects.None 
    End If 
End Sub 

Private Sub TextBox2_DragDrop(ByVal sender As Object, ByVal e As _ 
System.Windows.Forms.DragEventArgs) Handles TextBox2.DragDrop 
    ' Paste the text. 
    TextBox2.Text = e.Data.GetData(DataFormats.Text) 
End Sub 

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

Public Class Form2 

    Private MouseIsDown As Boolean = False 

    Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _ 
     Handles PictureBox1.MouseDown 
     ' Set a flag to show that the mouse is down. 
     MouseIsDown = True 
    End Sub 

    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As _ 
            System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove 
     If MouseIsDown Then 
      ' Initiate dragging. 
      PictureBox1.DoDragDrop(PictureBox1, DragDropEffects.Copy) 
     End If 
     MouseIsDown = False 
    End Sub 

    Private Sub FlowLayoutPanel1_DragEnter(ByVal sender As Object, ByVal e As _ 
              System.Windows.Forms.DragEventArgs) Handles FlowLayoutPanel1.DragEnter 
     ' Check the format of the data being dropped. 
     If (e.Data.GetDataPresent(DataFormats.Text)) Then 
      ' Display the copy cursor. 
      e.Effect = DragDropEffects.Copy 
     Else 
      ' Display the no-drop cursor. 
      e.Effect = DragDropEffects.None 
     End If 
    End Sub 

    Private Sub FlowLayoutPanel1_DragDrop(ByVal sender As Object, ByVal e As _ 
System.Windows.Forms.DragEventArgs) Handles FlowLayoutPanel1.DragDrop 
     ' Paste the text. 
     FlowLayoutPanel1.Text = e.Data.GetData(DataFormats.Bitmap) 
    End Sub 

End Class 

Но если Я делаю это, и перетаскиваю элемент picturebox1 на панель, я получаю только символ can not drop. Так вот, где я немного застрял. Может кто-нибудь, пожалуйста, предоставит мне некоторую информацию, как это сделать? Или дать мне несколько указателей?

+0

Ваш DoDragDrop инициирует с помощью 'Control' как данные для перетаскивания (что соответствует типу вопроса), но вы тестируете' DataFormats.Text' в dragenter. – Plutonix

ответ

2
' Check the format of the data being dropped. 
    If (e.Data.GetDataPresent(DataFormats.Text)) Then 

Неправильное. Теперь вы перетаскиваете объект PictureBox, это не текст, поэтому это выражение всегда будет False. Вы только счастливы, когда видите объект PictureBox, который перетаскивается. Как это:

If (e.Data.GetDataPresent(GetType(PictureBox))) Then 

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

Dim pb = CType(e.Data.GetData(GetType(PictureBox))) 
    FlowLayoutPanel1.Controls.Add(pb) 

Или вы хотите создать новую и присвоить свойство изображения, установив pb.Image в настоящее , Несколько способов сделать это, вам нужно подумать о том, как вы допустили ошибки пользователя.

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

  • Нет связанных вопросов^_^