Frage

Ich habe ein Problem, eine Datei aus dem Windows Explorer Ziehen an einem Windows Forms-Anwendung.

Es funktioniert gut, wenn ich Text ziehen, aber aus irgendeinem Grund ist es nicht die Datei zu erkennen. Hier ist mein Test-Code:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_DragDrop(object sender, DragEventArgs e)
        {

        }

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.Text))
            {
                e.Effect = DragDropEffects.Copy;
            }
            else if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Copy;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }
    }
}

AllowDrop auf true gesetzt ist auf Form1, und wie ich bereits erwähnt, funktioniert es, wenn ich Text ziehe auf das Formular, nur nicht eine tatsächliche Datei.

Ich bin mit Vista 64-bit ... nicht sicher, ob das ein Teil des Problems ist.

War es hilfreich?

Lösung

Das Problem kommt von Vista UAC . DevStudio als Administrator ausgeführt wird, aber Explorer als normaler Benutzer ausgeführt wird. Wenn Sie eine Datei aus dem Explorer per Drag & Drop auf der DevStudio Anwendung gehostet wird, ist, dass das gleiche wie ein nicht-privilegierten Benutzer versuchen, mit einem privilegierten Benutzer zu kommunizieren. Es ist nicht erlaubt.

Dies wird wahrscheinlich nicht angezeigt, wenn Sie den App außerhalb des Debuggers ausführen. Es sei denn, Sie es als Administrator dort laufen (oder wenn Vista automatisch erkennt, dass es ein Installer / Setup-app).

Sie können auch laufen Explorer als Admin , bei dest zum Testen. Oder deaktivieren Sie UAC (was ich nicht empfehlen würde, da man wirklich diese Probleme während der Entwicklung fangen will, nicht während des Einsatzes!)

Andere Tipps

Der Code, den Sie geschrieben sollte Arbeit.

Versuchen Sie dies am Anfang der Methode Dragenter setzen

string formats = string.Join( "\n", e.Data.GetFormats(false) );
MessageBox.Show( formats );

, die Formate Dump-Daten mit dem d'N'D Betrieb zugeordnet wird. Könnte uns Eingrenzung helfen, wo das Problem liegt.

Ich habe den Code, der a href <= "https://stackoverflow.com/questions/281706/drag-and-drop-from-windows-file-explorer-onto-a-windows-form-is-not # 281770" & Arbeitszimmer> arul erwähnt und die Dinge immer noch nicht funktioniert hat, aber es hat mir denken.

Ich begann zu denken, es könnte ein Vista Problem sein, so dass ich es an einen Freund geschickt, auf dem Windows XP hatte und es funktionierte großartig! Ich habe dann versuchte es außerhalb der Release-Ordner im Verzeichnis ist lief und was wissen Sie es funktioniert!

Das einzige Mal, das nicht der Fall funktioniert, wenn ich es in der Visual Studio 2008 IDE leite ... das ist einfach seltsam.

Haben Sie versucht, das STAThread Attribut auf die Hauptmethode hinzufügen?

  [STAThread]
  static void Main(string[] args)
  {
  }

hatte ich das gleiche Problem wie @mattruma Sinn ich nicht bekam Drag & Drop-Ereignisse. Nach der Zugabe von dem STAThread-Attribute auf die Hauptmethode war als erwartet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top