Drag&Drop o. e.effect leeren?

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von lris08.

    Drag&Drop o. e.effect leeren?

    Hallo nochmal...

    habe noch eine Frage zu Drag&Drop.

    In meinem anderen Post... gints ja um Kontakte - und wie zugreiffen, das funktioniert aber.

    Nun habe ich aber noch das Problem, was sich sich erst jetzt rausstellt, dass wenn einen kontatk ziehe auf mein form... es übernommen wird aber es bleibt auch im "speicher".

    ziehe ich den nächsten kontakt rüber, wird der erste und der neue in meine lustbox übernommen..

    endeffekt ist... dass mit jedem mal wenn ich einen kontakt ziehe... immer wieder alle von anfang an übernommen werden... (hoffe ich habe irgendwie erklären können) ...


    Wie kann ich jetzt den "speicher" von DragDrop leeren ??


    Alex

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lris08“ ()

    Was hastn du für Code im Event ListboxDragOVer (sofern vorhanden) stehen?
    mfg
    Jetzt schnell und einfach das Zehnfingersystem mit Scribble 3 erlernen. Mehr Informationen und Download gibts hier. Redundancy2 - leichtgewichtige freie Cloudsoftware. Folge mir auf GitHub
    Hi,

    hier mal der gesamte Code:

    VB.NET-Quellcode

    1. Private Sub ListBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragOver
    2. ListBox1.Items.Clear()
    3. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    4. ' erlaube das reinziehen von Dateien ----------> Code folgt säter !!!!
    5. e.Effect = DragDropEffects.Copy
    6. ToolStripStatusLabel1.Text = "Drag&Drop... Datei übernehmen"
    7. ElseIf e.Data.GetDataPresent("FileGroupDescriptor") Then
    8. ' erlaube das reinziehen von Outlook Elementen direkt
    9. e.Effect = DragDropEffects.Copy
    10. ToolStripStatusLabel1.Text = "DragDrop... Kontakt übernehmen"
    11. Else
    12. ' nix erlauben
    13. e.Effect = DragDropEffects.None
    14. End If
    15. End Sub
    16. Private Sub DragDrop_Funtkion(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop
    17. Dim myobj As New Object
    18. If e.Data.GetDataPresent("FileGroupDescriptor") Then
    19. For i As Integer = 1 To objOL.ActiveExplorer.Selection.Count
    20. myobj = objOL.ActiveExplorer.Selection.Item(i)
    21. ListBox1.Items.Add(myobj.LastName)
    22. Next
    23. End If
    24. End Sub


    Vielleicht hast du ne Idee dazu :) ... ?

    Gruß
    Alex
    so ich gebs auf...

    bekomme es nicht hin, suche bei google erfolglos und unter msdn find idarüber nichts...

    wenn dies einer liest, vielleicht hat er einen tipp für mich... bin jetzt echt gefrustet 8-)



    nochmal zu erklärung...

    ich ziehe den ersten kontakt in meine listbox, der wird auch angezeigt - also übernommen. ziehe ich den nächsten kontakt in meine listbox, wird der erste der zu erst übernommen wurde und der neue übernommen, also schon 2 kontakte... dann 3, dann 4... usw. usw.

    irgendwas müßte ich wahrscheinlich mit claer räumen... myobj.claer und objOL.claer habe ich probiert... nicht der richtige erfolg.
    Auch mit objOL.ActiveExplorer.Selection.claer habe ich es probiert, auch kein erfolg...


    also wenn einer einen tipp für mich hat, wäre ich wirklich sehr dankbar...

    viele grüße
    alex



    EDIT: Sorry, hätte diese Antwort als Edit in der vorherigen Antwort einfügen müssen - entschuldigung!!!!

    Edit by der_Kurt:
    * Beiträge zusammengefügt *

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „der_Kurt“ ()

    Und was ist wenn du DragDropEffects.Move benutzt?
    Jetzt schnell und einfach das Zehnfingersystem mit Scribble 3 erlernen. Mehr Informationen und Download gibts hier. Redundancy2 - leichtgewichtige freie Cloudsoftware. Folge mir auf GitHub
    Tipp: immer möglichst kleine, übersichtliche Methoden machen.
    Methoden, Variablen - ühaupt alles - immer sinnfällig benamen
    Gucken, überlange Zeilen zu vermeiden, ggfs. mit erzwungenem Zeilenumbruch ein sinnfälliges Layout gestalten:

    VB.NET-Quellcode

    1. Private Sub ListBox1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) _
    2. Handles ListBox1.DragOver
    3. ListBox1.Items.Clear()
    4. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    5. e.Effect = DragDropEffects.Copy
    6. ToolStripStatusLabel1.Text = "Drag&Drop... Datei übernehmen"
    7. ElseIf e.Data.GetDataPresent("FileGroupDescriptor") Then
    8. e.Effect = DragDropEffects.Copy
    9. ToolStripStatusLabel1.Text = "DragDrop... Kontakt übernehmen"
    10. Else
    11. e.Effect = DragDropEffects.None
    12. End If
    13. End Sub
    14. Private Sub DragDrop_Funtkion(ByVal sender As Object, ByVal e As DragEventArgs) _
    15. Handles ListBox1.DragDrop
    16. Dim myobj As New Object
    17. If e.Data.GetDataPresent("FileGroupDescriptor") Then
    18. For i As Integer = 1 To objOL.ActiveExplorer.Selection.Count
    19. myobj = objOL.ActiveExplorer.Selection.Item(i)
    20. ListBox1.Items.Add(myobj.LastName)
    21. Next
    22. End If
    23. End Sub
    Was fällt auf? Die Methode heißt zwar ListBox1_DragDrop(), behandelt aber das ListBox1.DragOver - Event.
    Also immer, wenn das gedragte über die Listbox gezogen wird, wird diese als erstes gelöscht.
    Hallo ErfinderDesRades :)

    also wennst mir das jetzt auch so erklären kannst, dass ich es versteht - vielleicht sitze ich auch einfach schon zu lange vorm pc... dann wäre ich Dir sehr dankbar...

    Code kompremieren und übersichtliches Layout ect. - verstanden...

    Aber das mit DragDrop und DragOver - entschuldige, jetzt verstehe ich es gar nicht mehr... ;(

    Hab gerade mal -nur zum testen- DragDrop und DragOver vertauscht... finzelt gleich gar nicht, ausser dann die Listbox follgeschrieben wird...

    Tur mir leid, ich versteht echt nich gerade was du mir sagen willst...

    GRuß
    Alex


    EDIT: Die Listbox ist nicht das Problem... ja wenn ich ein neues Element auf die Listbox ziehe, wird diese erstmal geleert - auch so gewollt.
    Das Problem ist ja, dass bei der übernahme immer alles was schon mal markiert und übernommen war nochmal übernommen wird...
    mit jedem mal übernehmen, werde die zu übernehmenden kontakte mehr...


    Anders gefragt -> alles was ich in outlook selectiere, bleibt irgend wo gespeicher und "addiert" sich auf, so dass die "übernehme" denkt es werden immer mehr!
    Wie kann ich das löschen oder leeren ?????

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lris08“ ()

    lris08 schrieb:

    Aber das mit DragDrop und DragOver - entschuldige, jetzt verstehe ich es gar nicht mehr...

    Tja - deutlicher kann ich nicht werden. Es steht genau da. Guck einfach auf den Browser, und suche , ob du da eine Methode "ListBox1_DragDrop()" in deinem Code findest.

    Und hinten dran steht die Handles-Klausel, da wird festgelegt, bei welchem Event diese Methode aufgerufen wird. Und wenigstens vom Namen her passen Methoden-Name und der Name des Events nicht gut zusammen - DragOver ist was anneres als DragDrop.

    Naja - egal. Probierma, das Listbox.Items.Clear so zu verlegen, dasses beim DragDrop ausgeführt wird, nicht beim DragOver. Also in die Sub, die bei dir derzeit noch "DragDrop_Funtkion" heißt.

    Aber vlt. fangich jetzt erst an, dein Prob zu kapieren: Dieses objOL.ActiveExplorer.Selection - Dings - das hat nicht zufällig eine .Clear-Methode? Oder hat objOL.ActiveExplorer iwas mit .ClearSelection - oder son Zeugs?
    nur zur Info... habe von Listbox auf Datagridview umgestellt...

    also, das mit Listbox oder Datagridview leeren ist nicht das problem...


    es handelt sich um das entfernen der bereits markierten kontakte aus der übernahme... immer wenn ich einen kontakt neu übernehme, werde die vorhergehenden kontakte die markiert wurde nochmal übernommen, obwohl sie in outlook gar nicht merkiert sind (die waren es mal).

    Damit

    VB.NET-Quellcode

    1. objOL.ActiveExplorer.ClearSelection()

    habe ich es auch schon versucht, keine lösung - geht nicht... warum, keine ahnung, aber die vorhergenden selectierungen werden nicht gelöscht oder zerstört

    meine vermutung ist, dass es irgendwo zwischen outlook selektierung und der übernahme oer DragDropEffects hängt... oder an der myobj. -> aber die habe ich schon versucht mit Nothing zu leeren - auch kein Erfolg...


    anbei ein bild... mit jedem neuen übernommen kontakt, (erst wird DGV geleert auch ok so) wird die liste wieder mit allen auch zu vor versuchten kontakten neu erstellt.

    so wird die liste immer länger und länger...

    aktueller Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub ListBox1_DragOver(ByVal sender As Object, ByVal e As DragEventArgs) Handles DataGridView1.DragOver
    2. DataGridView1.Columns.Clear()
    3. DataGridView1.Rows.Clear()
    4. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    5. e.Effect = DragDropEffects.Copy
    6. ToolStripStatusLabel1.Text = "Drag&Drop... Datei übernehmen"
    7. ElseIf e.Data.GetDataPresent("FileGroupDescriptor") Then
    8. e.Effect = DragDropEffects.Copy
    9. ToolStripStatusLabel1.Text = "DragDrop... Kontakt übernehmen"
    10. Else
    11. e.Effect = DragDropEffects.None
    12. End If
    13. End Sub
    14. Private Sub DragDrop_Funtkion(ByVal sender As Object, ByVal e As DragEventArgs) Handles DataGridView1.DragDrop
    15. Dim objOL As New Outlook.Application
    16. Dim myobj As New Object
    17. With DataGridView1.Columns
    18. .Add("Firma", "Firma")
    19. .Add("Vorname", "Vorname")
    20. .Add("Nachname", "Nachname")
    21. .Add("Plz", "Plz")
    22. .Add("Ort", "Ort")
    23. .Add("Status", "Status")
    24. End With
    25. 'Spaltenbreiten
    26. With DataGridView1
    27. .Columns(0).Width = 100
    28. .Columns(1).Width = 100
    29. .Columns(2).Width = 100
    30. .Columns(3).Width = 80
    31. .Columns(4).Width = 100
    32. .Columns(5).Width = 50
    33. End With
    34. If e.Data.GetDataPresent("FileGroupDescriptor") Then
    35. For i As Integer = 1 To objOL.ActiveExplorer.Selection.Count
    36. myobj = objOL.ActiveExplorer.Selection.Item(i)
    37. DataGridView1.Rows.Add(myobj.CompanyName, myobj.LastName, myobj.FirstName, "", "", "OK...")
    38. Next
    39. End If
    40. objOL.ActiveExplorer.ClearSelection()
    41. objOL = Nothing
    42. myobj = Nothing
    Bilder
    • Image2.jpg

      53,97 kB, 563×439, 109 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lris08“ ()

    Ich glaub eher, es sind Fehler in deim Code.
    Das besonders böse an DragnDrop ist, dass im DragDrop-Event Exceptions unterdrückt werden. Du kannst also nur per Einzelstep überprüfen, in welcher Zeile die Ausführung abgebrochen wird.

    Probiermal, und wenner im Einzelstep aus der Methode einfach raushopft, dann ist das eine Fehler-Zeile.
    Danke für eure Hilfe, aber dieses Projekt mit übernahme von Outlookkontakten werde ich einstellen - kurzer Hand, unser "Verkauf" muß dann eben einen Kunden nach dem anderen anlegen... geht nicht anders....

    Hab auch noch soetwas Privatzeit... :cursing:

    nochmal danke...

    Alex