Drag und Drop ausführen aber erst wenn die linke Maustaste losgelassen wurde

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von mbembenek.

    Drag und Drop ausführen aber erst wenn die linke Maustaste losgelassen wurde

    Hallo, folgendes Problem besteht.

    Ich habe ein formular, bei dem ich verschiedene Dateiformate vom Explorer aus her schieben kann.

    Das funktioniert auch. wie schaffe ich es, das der DropVorgang erst durchgeführt wird wenn ich die linke Maustaste loslasse?

    Danke für eure Hilfe. Hier ist der Code:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Windows.Forms
    3. Public Class frmBetrachter
    4. #Region "DragDrop"Private Sub frmBetrachter_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragEnter
    5. e.Effect = DragDropEffects.CopyDim Dateien() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
    6. End Sub
    7. #End RegionSub Ausgabe(ByVal Dateien() As String)
    8. Dim puffer(0) As ByteDim g As Graphics = Me.CreateGraphics
    9. Dim s As String = ""
    10. 'PICS aus dem Explorer anzeigen
    11. If Dateien.GetUpperBound(0) = 0 ThenDim fs As New IO.FileStream(Dateien(0), FileMode.Open, FileAccess.Read)
    12. If fs.Name.EndsWith("bmp") _OrElse fs.Name.EndsWith("jpg") _
    13. OrElse fs.Name.EndsWith("gif") _
    14. OrElse fs.Name.EndsWith("png") ThenDim imgbild As Image = Image.FromStream(fs)
    15. g.Clear(Color.Black)
    16. g.DrawImage(imgbild, 10, 10)
    17. 'Musik aus der AblageElseIf fs.Name.EndsWith("wav") _
    18. OrElse fs.Name.EndsWith("mp3") ThenMy.Computer.Audio.Play(fs.Name, AudioPlayMode.Background)
    19. End IfMe.Text = fs.Name
    20. Else
    21. Refresh()For Each d As String In Dateien
    22. s &= d & vbCrLf
    23. Next
    24. s &= vbCrLf & vbCrLf _
    25. & "Zum Anzeigen der Dateien ziehe Sie nun eine Datei auf die Flche!"Dim f As New Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Pixel)
    26. g.DrawString(s, f, Brushes.Beige, 10, 10)
    27. End If
    28. End SubDim ptmaus As Point
    29. Private Sub frmBetrachter_Invalidated(ByVal sender As Object, ByVal e As System.Windows.Forms.InvalidateEventArgs) Handles Me.Invalidated
    30. End SubPrivate Sub frmBetrachter_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    31. If e.Control And e.KeyCode = Keys.V Then
    32. Refresh()
    33. ElseIf e.Control And e.KeyCode = Keys.F ThenDim meinpea As New PaintEventArgs(Me.CreateGraphics, Me.ClientRectangle)
    34. clipformarteeinfgen(meinpea)
    35. End If
    36. End SubPrivate Sub frmBetrachter_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
    37. ptmaus = e.Location
    38. End SubPrivate Sub tsiFormateAnzeigen_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles tsiFormateAnzeigen.ClickDim meinpea As New PaintEventArgs(Me.CreateGraphics, Me.ClientRectangle)
    39. clipformarteeinfgen(meinpea)
    40. End SubPrivate Sub tsiEinfgen_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles tsiEinfgen.Click
    41. End SubPrivate Sub clipdateneinfgen(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseDown
    42. Dim s As String = ""Dim g As Graphics = Me.CreateGraphics
    43. If e.Button = Windows.Forms.MouseButtons.Left Then
    44. With My.Computer.Clipboard
    45. Select Case TrueCase .ContainsImage
    46. s = "image"g.DrawImage(System.Windows.Forms.Clipboard.GetImage, New Point(10, 10))
    47. Case .ContainsText
    48. s = "text"Dim f As New Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Pixel)
    49. g.DrawString(.GetText, f, Brushes.Black, 10, 10)Case .ContainsData(DataFormats.FileDrop)
    50. Dim dateien() As String = _CType(.GetData(DataFormats.FileDrop), String())
    51. Ausgabe(dateien)
    52. End Select
    53. End With
    54. End If
    55. End SubSub clipformarteeinfgen(ByVal pea As PaintEventArgs)
    56. Dim s As String = ""
    57. Dim formate() As Stringformate = My.Computer.Clipboard.GetDataObject.GetFormats()
    58. s = ""For Each sf As String In formate
    59. s &= sf & vbCrLf
    60. Next
    61. 's &=mloc.x &"," mloc.y -'Zur Kontrolle der Mausposition
    62. If s.Length ThenDim f As New Font("Courier New", 12, FontStyle.Regular)
    63. pea.Graphics.Clear(Color.White)pea.Graphics.DrawString(s, f, Brushes.Brown, CSng(ptmaus.X), CSng(ptmaus.Y))
    64. End IfEnd Sub
    65. End Class
    Ich habe das geändert. Wenn ich aber jetz ein Bild auf die Form schieben will, funktioniert es nicht. Der Mauszeiger verwandelt sich in einem Durchfahrtsverbotsschild und das war es.

    Was ist daran noch falsch? Danke

    VB.NET-Quellcode

    1. Private Sub frmBetrachter_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
    2. e.Effect = DragDropEffects.CopyDim Dateien() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
    3. Ausgabe(Dateien)
    4. End Sub
    5. #End RegionSub Ausgabe(ByVal Dateien() As String)
    6. Dim puffer(0) As ByteDim g As Graphics = Me.CreateGraphics
    7. Dim s As String = ""
    8. 'PICS aus dem Explorer anzeigen
    9. If Dateien.GetUpperBound(0) = 0 Then
    10. End IfDim fs As New IO.FileStream(Dateien(0), FileMode.Open, FileAccess.Read)
    11. If fs.Name.EndsWith("bmp") _OrElse fs.Name.EndsWith("jpg") _
    12. OrElse fs.Name.EndsWith("gif") _
    13. OrElse fs.Name.EndsWith("png") ThenDim imgbild As Image = Image.FromStream(fs)
    14. g.Clear(Color.Black)
    15. g.DrawImage(imgbild, 10, 10)
    16. 'Musik aus der AblageElseIf fs.Name.EndsWith("wav") _ Me.Text = fs.Name
    17. Else
    18. Refresh()For Each d As String In Dateien
    19. s &= d & vbCrLf
    20. Next
    21. s &= vbCrLf & vbCrLf _
    22. & "Zum Anzeigen der Dateien ziehe Sie nun eine Datei auf die Flche!"Dim f As New Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Pixel)
    23. g.DrawString(s, f, Brushes.Beige, 10, 10)
    24. End If
    25. End Sub
    Sorry ich hatte den Code total verhunzt eingefügt sorry:

    Hier nochmal der Code:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Windows.Forms
    3. Public Class frmBetrachter
    4. #Region "DragDrop"
    5. Private Sub frmBetrachter_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
    6. e.Effect = DragDropEffects.CopyDim Dateien() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
    7. Ausgabe(Dateien)End Sub
    8. #End Region
    9. Sub Ausgabe(ByVal Dateien() As String)
    10. Dim puffer(0) As Byte
    11. Dim g As Graphics = Me.CreateGraphics
    12. Dim s As String = ""
    13. 'PICS aus dem Explorer anzeigen
    14. If Dateien.GetUpperBound(0) = 0 Then
    15. End If
    16. Dim fs As New IO.FileStream(Dateien(0), FileMode.Open, FileAccess.Read)
    17. if fs.Name.EndsWith("bmp") _
    18. OrElse fs.Name.EndsWith("jpg") _
    19. OrElse fs.Name.EndsWith("gif") _
    20. OrElse fs.Name.EndsWith("png") Then
    21. Dim imgbild As Image = Image.FromStream(fs)
    22. g.Clear(Color.Black)
    23. g.DrawImage(imgbild, 10, 10)
    24. Me.Text = fs.Name
    25. Else
    26. Refresh()
    27. For Each d As String In Dateien
    28. s &= d & vbCrLf
    29. Next
    30. s &= vbCrLf & vbCrLf _
    31. & "Zum Anzeigen der Dateien ziehe Sie nun eine Datei auf die Flche!"Dim f As New Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Pixel)
    32. g.DrawString(s, f, Brushes.Beige, 10, 10)
    33. End If
    34. End Sub


    Hat noch jemand eine Idee? Danke