Estoy tratando de crear un formulario de windows en la que me puede caer un archivo/carpeta.

Tengo el siguiente código en una aplicación 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!");
    }
}

He establezca la propiedad AllowDrop a la verdad.
He tratado de ejecutar la aplicación en la depuración dentro de Visual Studio.
Basado en las respuestas a otras preguntas similares, he intentado correr el exe compilado como administrador.
He intentado correr el exe compilado no como administrador.

Pero lo que puedo hacer, no puedo conseguir el evento DragDrop a fuego. El evento DragEnter hace fuego, sin embargo. Lo que me estoy perdiendo?

  • ¿Has comprobado si usted accidentalmente perdido la conexión entre el evento DragDrop y Form1_DragDrop controlador? Lo siento, si usted lo hizo.
  • Es un simple formulario, o se han añadido controles? Si se le cae en un control del formulario, será que el control de la que es responsable.
  • Arrastrar y Soltar no funciona si se ejecuta Visual Studio y su aplicación como administrador y el Explorador de Windows se está ejecutando en tu cuenta normal.
  • ¿alguien sabe qué tal ridiculez existe?
  • De seguridad. Lo que solía ser COM comunicación envuelto, así que se veía como la api de Win32 y sería una MALA idea para permitir a un usuario que se ejecuta en el cuadro para el acceso de otros usuarios de la memoria…. Cómo es hoy, probablemente de la misma.
  • Mi upvote para @Archlight no funcionó, por lo que destacar aquí: Admin vs Baja prioridad de usuario era todo era mi problema. Ejecutar como Administrador y todo funciona bien.

7 Comentarios

  1. 22

    Es su DragDropEffect apropiadamente? Trate de colocar esto en el Controlador de Eventos DragEnter Método:

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            Console.WriteLine("DragEnter!");
            e.Effect = DragDropEffects.Copy;
        }

    Por defecto se establece en DragDropEffects.None por lo que el evento Drop no disparar.

    • Exactamente, gracias.
    • Oh mi dios, GRACIAS SEÑOR/SEÑORA! He estado buscando esta fo tanto tiempo, y yo no podía encontrar en cualquier lugar.
  2. 12

    Para quien lea esto porque los consejos anteriores no funcionan.

    Aviso que Drag&Drop no funciona si se ejecuta Visual Studio o su aplicación «Como Administrador» como se informó aquí: https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/2164233-fix-drag-and-drop-to-open-file-when-running-as-adm

    • Que parece que se está refiriendo a arrastrar y soltar dentro de Visual Studio sí, no de la ejecución de aplicaciones en Visual Studio. O me estoy perdiendo algo?
    • Oups, de hecho. Pero es mi problema. Yo como no se puede arrastrar y soltar los archivos en mi aplicación WinForm inicia en modo de depuración dentro de VS.Net si este se ejecuta como admin…
    • No puedo agradecerles lo suficiente. He desperdiciado tanto tiempo en esto.
  3. 4

    intentar usar algo como esto en tu Form1_DragEnter:

    private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormats.FileDrop))
            e.Effect = DragDropEffects.All;
        else
        {
            String[] strGetFormats = e.Data.GetFormats();
            e.Effect = DragDropEffects.None;
        }
    }

    esto desencadena su Form1_DragDrop

    • +1 para el GetDataPresent de verificación. Gracias por todas las respuestas.
  4. 4

    No olvides en las propiedades del formulario para cambiar AllowDrop a la «Verdad» de Su código es probablemente muy bien, pero si esta propiedad no está habilitado para cierto que no funciona. Se establece en false de forma predeterminada.

    • AllowDrop se establece en True. El aceptó respuesta es la correcta.
  5. 0

    Han escrito los eventos MouseDown y MouseMove del objeto que se arrastra desde.

    • No muy seguro de por qué esto fue votada abajo. Yo uso este enfoque y funciona muy bien. si (e.El Botón Izquierdo Del Ratón == MouseButtonState.Presionado) { DragDrop.DoDragDrop(este.dragItem, este.dragItem, DragDropEffects.Copia); } Y en el movimiento del ratón, simplemente el conjunto de correo.Se maneja a cierto uso un booleano llamado de arrastre para detectar si el usuario está en movimiento el elemento cuando se desencadena el evento. Cada área, para dejar a tiene su propio evento para el manejo de lo que fue abandonado por donde.
  6. 0

    Otra muy desagradable y difícil problema puede ser que usted tiene modicar OnHandleCreated, pero se olvidó de llamar a la implementación base. A continuación, la aplicación no se puede establecer la interna necesaria la configuración de la ventana de respeto a su AllowDrop propiedad.

    E. g., asegúrese de llamar base.OnHandleCreated(e) en su reemplazo, y que va a estar bien.

  7. 0

    También he tenido este desconcertante problema a pesar de la forma de tener AllowDrop establece en true!

    En mi aplicación de Formularios de Windows (VS2017) tuve que asegurarme de que me había puesto un Inicio válidos objeto: e.g myprojectname.Programa y fue todo bien!

Dejar respuesta

Please enter your comment!
Please enter your name here