Pourquoi est-goutte permis, même si des Effets = DragDropEffects.Aucun n'est défini?
Glissement se produit à partir de "source" pour "cible". Quand la source des appels DoDragDrop() avec allowedEffects comme DragDropEffects.La copie, puis je suis en mesure d'annuler la baisse des Effets = DragDropEffects.Aucun à la cible (dans événement DragOver).
Mais la même situation d'échec lorsque j'ai mis mon allowedEffects comme DragDropEffects.Déplacer.
À reproduire la situation, téléchargez l'exemple de http://jaimersamples.members.winisp.net/samples/dragdrop/drag.zip
Changement de ligne.. (à DragDropEffects.Déplacer)
DragDrop.DoDragDrop(this.DragSource, data, DragDropEffects.Copy);
Ajouter ligne..
void Window1_DragOver(object sender, DragEventArgs args)
{
args.Effects = DragDropEffects.None;
Et aussi de commenter l'ensemble, DragSource_GiveFeedback..
void DragSource_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
//System.Diagnostics.Debug.WriteLine("DragSource_GiveFeedback " + e.Effects.ToString());
Est-il une sorte de bug dans le cadre, ou suis-je tout simplement pas en mesure de voir quelque chose d'évident?
- Je n'arrive pas à reproduire votre problème avec l'échantillon. Non modifié, l'échantillon ne me permet pas de déposer la boîte rouge dans la destination de la toile. Aussi, toutes les instances de DragDropEffects.* sont déjà .Se déplacer, donc je ne suis pas sûr que la ligne de code qui doit être changé. Pour ce que sa vaut le coup, j'ai changé tous à DragDropEffects.Copie et je n'ai toujours pas de déposer l'objet dans le canevas.
- Je ne suis pas en mesure de prendre des captures d'écran pour montrer ce que l'effet voulu, je le veux. Le curseur de la souris n'est pas inclus dans les captures d'écran, mais je vais reformuler ma question. L'échantillon ne pas mettre en œuvre l'abandon de la zone rouge, il commence juste glisser la souris. Ce que je veux, c'est que le curseur de la souris, il faut toujours indiquer si un menu est autorisé ou pas. C'est quand j'appel DoDragDrop() avec DragDropEffects.La copie, et le paramètre args.Effets = DragDropEffects.Aucun dans Window1_DragOver. Mais cela ne fonctionne pas quand je l'appelle DoDragDrop() avec DragDropEffects.Déplacer.
- Ne devriez pas vous être de réglage de l'effet lors de la rétroaction?
- Ne pas le cadre de modifier automatiquement le curseur de la souris basé sur le AllowedEffects fixé par la source de glissement, et les Effets par cible? Quel que soit le peu que je sais, si des Effets est incompatible avec AllowedEffects, le curseur de la souris passe automatiquement en "croix".
- le lien semble mort
Vous devez vous connecter pour publier un commentaire.
Après d'aller sur vos commentaires et votre code à nouveau, avec quelques efforts, j'ai été capable de comprendre et de reproduire le problème dont vous parlez.
Ce que vous êtes en manque, c'est la ligne:
Dans votre
Window1_DragOver
événement. Ajoutez-le et il fonctionnera de la même pour les deuxDragDropEffects.Move
etDragDropEffects.Copy
.Pourquoi il a travaillé pour
DragDropEffects.Copy
sans réglagee.Handled
, en premier lieu, je vous laisse deviner. Sans-papiers, les conditions de conduire à des sans-papiers comportement.Je vais vous conseillons très vivement la prochaine fois que vous publiez un exemple de code contenant le minimum de code possible à reproduire le problème. Je m'excuse pour l'origine de la confusion, mais néanmoins, il était très difficile de comprendre ce qui se passait dans celui-ci.
Je pense que la question a été répondue bien au-dessus mais j'ai juste pensé que c'était une précieuse leçon que j'ai apprise lorsque vous faites glisser-déposer...
La première DragDropEffect qui est transmis à la méthode DoDragDrop doit être considérée comme une suggestion (ou le désir) de ce que l'opération doit être effectuée. Si je me souviens bien, la méthode renvoie l'effet réel que la cible effectuée si le glisser-déposer a été fait réussi (et ce n'est pas annulée).
Cela crée un simple protocole de communication entre la source et la destination et est surtout utile pour les cas où il y a plusieurs cibles potentielles pour la faire glisser. Il permet de distinguer entre ce qui s'est réellement passé. Ceci est particulièrement utile de réfléchir parce que vous pourriez être en interaction avec un composant que vous ne savez même pas parler ou attendre. Si vous prenez cela en compte, vous pouvez parfois obtenir des bienfaits surprenants où glisser-déposer devient de plus en plus utile que ce qui avait été prévu parce que soudainement, d'autres composants peuvent interagir sans autres explicite de codage.
Cela étant dit, j'imagine que cela a du sens pour l' .net framework pour traiter de copier et de déplacer différemment par défaut, car la seule opération qui est constructif et l'autre est destructeur. Je pense qu'ils tentent de protéger contre les destructeurs des opérations se produisent sans être traitée de manière explicite. Pas sûr de cela, mais juste une pensée 🙂