Warum ist Drop erlaubt, auch wenn Effects = DragDropEffects.None gesetzt ist?
Ziehen kommt von "Quelle" nach "Ziel". Wenn die Quelle ruft DoDragDrop() mit allowedEffects as DragDropEffects.Kopieren, dann bin ich in der Lage zu stornieren, fallen durch Einstellung Effects = DragDropEffects.Keiner am Ziel (in der DragOver-Ereignis).
Aber die gleiche situation ausfällt wenn ich meine allowedEffects as DragDropEffects.Bewegen.
Reproduzieren Sie die situation, laden Sie die Probe aus http://jaimersamples.members.winisp.net/samples/dragdrop/drag.zip
Leitung ändern.. (DragDropEffects.Move)
DragDrop.DoDragDrop(this.DragSource, data, DragDropEffects.Copy);
Zeile hinzufügen..
void Window1_DragOver(object sender, DragEventArgs args)
{
args.Effects = DragDropEffects.None;
Und kommentieren Sie auch den gesamten, DragSource_GiveFeedback..
void DragSource_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
//System.Diagnostics.Debug.WriteLine("DragSource_GiveFeedback " + e.Effects.ToString());
Ist es eine Art bug im framework, oder ich bin einfach nicht in der Lage, um zu sehen, etwas, das offensichtlich ist?
InformationsquelleAutor der Frage Trainee4Life | 2009-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nachdem ich über Ihre Kommentare und Ihre Codes wieder, mit einiger Mühe war ich in der Lage zu verstehen, und reproduzieren Sie das problem reden.
Was Ihnen fehlt, ist die Zeile:
In Ihrem
Window1_DragOver
Veranstaltung. Hinzufügen, und es wird die gleiche Arbeit für beideDragDropEffects.Move
undDragDropEffects.Copy
.Warum es funktionierte für
DragDropEffects.Copy
ohne Einstellunge.Handled
in den ersten Platz, ist Reine Vermutung. Ohne Papiere Bedingungen führen zu undokumentierten Verhalten.Werde ich sehr stark empfehlen, dass nächste mal, wenn Sie post ein code-Beispiel mit dem möglichst wenig code das problem zu reproduzieren. Ich entschuldige mich für die Verwirrung, aber es war trotzdem sehr hart, um herauszufinden, was Los war.
InformationsquelleAutor der Antwort Aaronaught
Ich denke, die Frage wurde beantwortet, auch oben, aber ich dachte nur, dass dies eine wertvolle Lektion, die ich gelernt, wenn dabei die drag-and-drop...
Den ersten DragDropEffect, dass die an die DoDragDrop-Methode betrachtet werden sollte, als ein Vorschlag (oder Wunsch) für welche operation durchgeführt werden soll. Wenn ich mich richtig erinnere, dass die Methode gibt die tatsächliche Wirkung, die dem Ziel durchgeführt werden, wenn die drag-and-drop wirklich erfolgreich war (und nicht abgesagt).
Dieser erstellt ein einfaches Kommunikations-Protokoll zwischen Quelle und Ziel und ist vor allem in Fällen sinnvoll, wenn es mehrere potenzielle Ziele für die drag. Es ermöglicht Ihnen, zu unterscheiden, was tatsächlich passiert ist. Dies ist besonders nützlich, um ungefähr zu denken, weil Sie möglicherweise die Interaktion mit einer Komponente, die Sie gar nicht kennen oder erwarten. Wenn Sie dies berücksichtigen, kann man manchmal erstaunliche Vorteile, wo drag-and-drop wird mehr nützlich, dass ursprünglich geplant war, weil plötzlich andere Komponenten zusammenarbeiten können, ohne andere explizite Codierung.
Mit diesem wird gesagt, ich könnte mir vorstellen, dass es Sinn macht für die .net framework zu behandeln, kopieren und verschieben von Operationen anders als in der Voreinstellung, da das ein Vorgang ist konstruktiv und andere destruktiv. Ich denke, Sie versuchen zu schützen vor unerwünschten destruktiven Operationen auftreten, ohne dass Sie explizit behandelt. Nicht sicher, dieser aber nur so ein Gedanke 🙂
InformationsquelleAutor der Antwort Luke Machowski