Glisser-Déposer ne fonctionne pas en C#, Winforms Application
Je suis en train de créer un formulaire windows sur qui je peut supprimer un fichier/dossier.
J'ai le code suivant dans une application WinForms
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
Debug.Print("DragEnter");
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
MessageBox.Show("Dropped!");
}
}
J'ai mis la propriété AllowDrop de vrai.
J'ai essayé de lancer l'application de débogage dans Visual Studio.
Basé sur les réponses à d'autres questions similaires, j'ai essayé de lancer l'exe compilé en tant qu'administrateur.
J'ai essayé de lancer l'exe compilé pas en tant qu'administrateur.
Mais quoi que je fasse, je n'arrive pas à l'événement DragDrop pour le feu. L'événement DragEnter ne feu, cependant. Ce qui me manque?
- Avez-vous vérifier si vous avez accidentellement perdu la connexion entre l'événement DragDrop et Form1_DragDrop gestionnaire? Désolé, si vous l'avez fait.
- Est-ce une forme ordinaire, ou avez-vous ajouté des contrôles? Si vous tomber sur une forme de contrôle, il sera ce que le contrôle qui est responsable.
- Glisser-Déposer ne fonctionne pas si vous exécutez Visual Studio / de votre application en tant qu'administrateur et de l'Explorateur Windows s'exécute sous votre compte normal.
- personne ne sait pourquoi un tel ridicule existe?
- De sécurité. Il a utilisé pour être de communication COM enveloppé de sorte qu'il ressemblait à de l'api Win32 et ce serait une MAUVAISE idée pour permettre à un utilisateur en cours d'exécution sur la zone d'accès d'un autre utilisateur de la mémoire.... Comment il est aujourd'hui, probablement le même.
- Mon upvote pour @Archlight n'ai pas de travail, donc de noter ici: Admin vs priorité Inférieure de l'utilisateur était mon problème a été. Exécuter en tant qu'Admin et tout fonctionne très bien.
Vous devez vous connecter pour publier un commentaire.
Est votre
DragDropEffect
définir de manière appropriée? Essayez de placer cela dans le DragEnter Méthode de Gestionnaire d'Événement:Par défaut, il a été mis à
DragDropEffects.None
de sorte que la Chute de l'événement ne serait pas le feu.Pour ceux qui voudrait lire ce parce que les conseils ci-dessus ne fonctionnent pas.
Avis que le Drag&Drop ne fonctionne pas si vous exécutez Visual Studio ou de votre application "en tant Qu'Administrateur" comme indiqué ici: https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/2164233-fix-drag-and-drop-to-open-file-when-running-as-adm
essayez d'utiliser quelque chose comme ceci dans votre Form1_DragEnter:
il déclenche votre Form1_DragDrop
N'oubliez pas dans les propriétés du formulaire pour modifier AllowDrop à un "Vrai" Votre code est probablement très bien, mais si cette propriété n'est pas permis de la vraie, ça ne marchera pas. Il est à false par défaut.
Avez-vous écrit les événements MouseDown et MouseMove événements de l'objet que vous êtes en les faisant glisser à partir.
Un autre très méchant et délicat problème peut être que vous avez remplacé
OnHandleCreated
, mais il a oublié d'appeler l'implémentation de base. Ensuite, votre demande ne parvient pas à définir interne de la fenêtre de paramètres à l'égard de votreAllowDrop
propriété.E. g., assurez-vous d'appeler
base.OnHandleCreated(e)
dans votre remplacement, et vous serez amende.J'ai aussi eu ce problème complexe malgré le formulaire d'avoir AllowDrop true!
Dans mon application Windows Forms (VS2017) je devais m'assurer que j'avais mis un valide objet de Démarrage: e.g myprojectname.Programme et tout était bien!