Arrastrando pasa de «fuente» a «destino». Cuando el origen de las llamadas DoDragDrop() con allowedEffects como DragDropEffects.Copiar, luego soy capaz de cancelar la caída por la configuración de Efectos = DragDropEffects.Ninguno en el de destino (en el evento DragOver).

Pero la misma situación se produce un error cuando pongo mi allowedEffects como DragDropEffects.Mueva.

A reproducir la situación, descargar el ejemplo de http://jaimersamples.members.winisp.net/samples/dragdrop/drag.zip

Línea de cambio.. (a DragDropEffects.Mover)

DragDrop.DoDragDrop(this.DragSource, data, DragDropEffects.Copy);

Agregar línea..

void Window1_DragOver(object sender, DragEventArgs args)
{
   args.Effects = DragDropEffects.None;

Y también el comentario de todo, DragSource_GiveFeedback..

void DragSource_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
    //System.Diagnostics.Debug.WriteLine("DragSource_GiveFeedback " + e.Effects.ToString());

¿Hay algún tipo de bug en el marco, o soy yo simplemente no es capaz de ver algo obvio?

  • Estoy teniendo problemas para reproducir el problema con la muestra. Sin modificar, la muestra no me permite colocar el cuadro rojo en el destino de la lona. También, todas las instancias de DragDropEffects.* son ya establecida .Mover, así que no estoy seguro de que la línea de código debe ser cambiado. Por lo que vale la pena, he cambiado todos ellos a DragDropEffects.Copia y todavía no pude colocar el elemento en el destino de la lona.
  • Yo no soy capaz de tomar capturas de pantalla para mostrar lo que pretende el efecto que quiero. El cursor del ratón no está incluido en las capturas de pantalla, pero voy a reformular mi pregunta. El ejemplo no implementar la caída de la caja roja, que comienza el arrastre. Lo que yo quiero es que el cursor del ratón siempre indicar si una gota es permitido o no. Es trabajo cuando me llaman DoDragDrop() con DragDropEffects.Copia, y el establecimiento de argumentos.Efectos = DragDropEffects.Ninguno en Window1_DragOver. Pero no funciona cuando llamo DoDragDrop() con DragDropEffects.Mueva.
  • Debería ser establecer el efecto durante la retroalimentación?
  • No el marco de cambiar automáticamente el cursor del ratón se basa en la AllowedEffects establecido por el origen de arrastre, y a los Efectos de lo previsto por el destino? De lo poco que sé, si los Efectos es incompatible con AllowedEffects, el cursor del ratón cambia automáticamente a «signo de la cruz».
  • el enlace parece estar muerto
InformationsquelleAutor Trainee4Life | 2009-12-11

2 Comentarios

  1. 56

    Después de ir a través de sus comentarios y su código de nuevo, con un poco de esfuerzo, yo era capaz de entender y reproducir el problema que usted está hablando.

    Lo que está faltando es la línea:

    e.Handled = true;

    En su Window1_DragOver evento. Añadir que y funcionará de la misma para ambos DragDropEffects.Move y DragDropEffects.Copy.

    Por qué funcionó para DragDropEffects.Copy sin establecer e.Handled, en primer lugar, es una incógnita. Condiciones de irregularidad de conducir a indocumentados comportamiento.

    Voy a muy fuertemente recomendamos que la próxima vez que publique un ejemplo de código que contiene la mínimo código posible para reproducir el problema. Me disculpo por el original de la confusión, pero sin embargo era muy difícil averiguar lo que estaba pasando en este.

    • 1. Hablando sobre el arrastre ámbito de aplicación a la totalidad de la ventana, sus meramente un cheque para cancelar el arrastre si el ratón se arrastra hacia fuera de la ventana. 2. Mi pregunta dice expresamente que la totalidad de la GiveFeedback debe ser comentado. 3. Yo no entiendo que es el destino que especifica si se debe aceptar o no los datos. Destino de colocación utiliza su evento DragOver para especificar si desea o no aceptar la gota mediante el establecimiento de argumentos.Efectos = DragDropEffects.Ninguno. También puede establecer Copiar o Mover efectos, si ese es el caso. 4. DragSource todavía pueden especificar permitido efectos en DragDrop.DoDragDrop() la llamada.
    • 5. El código no se utiliza en la producción. Fue una de las muestras estudié cuando creé el arrastrar y soltar en el marco de nuestra aplicación.
    • Por favor, lea la pregunta de nuevo, si usted puede reproducir lo que dicen, a continuación, usted estaría en una mejor posición para responder.
    • Por favor, ver mi edición. Esto debe ser lo que usted está buscando.
    • Disculpas por la tardía respuesta, he leído tu respuesta, pero no obtener el tiempo para comprobarlo. De todos modos, creo que debería resolver el problema. Voy a dejar que usted sabe que cuando yo lo intente. Y gracias por tomarse el tiempo.. 🙂
  2. 1

    Creo que la pregunta fue respondida bien arriba, pero pensé que esto era una valiosa lección que aprendí al hacer arrastrar y soltar…

    La inicial DragDropEffect que se pasa al método DoDragDrop debe ser considerado como una sugerencia (o el deseo) ¿para qué operación se debe realizar. Si recuerdo correctamente, el método devuelve el efecto real que el destino se realiza si la operación de arrastrar y soltar en realidad fue un éxito (y no cancelada).

    Esto crea un sencillo protocolo de comunicación entre el origen y el destino y es útil principalmente para los casos cuando hay varios posibles objetivos para el arrastre. Esto le permite distinguir lo que realmente sucedió. Esto es particularmente útil para pensar acerca de porque puede estar interactuando con un componente que no sabe o espera. Si usted toma esto en cuenta, usted puede conseguir a veces sorprendentes beneficios de arrastrar y soltar se vuelve más útil que fue planeada originalmente para porque, de repente, otros componentes pueden interactuar sin ningún otro tipo de codificación explícitas.

    Con esto se dice, me imagino que tiene sentido para el .net framework para tratar de copiar y mover las operaciones de manera diferente por defecto porque la operación es constructivo y el otro es destructivo. Creo que están tratando de proteger no destructivos operaciones que ocurren sin ser manejados de forma explícita. No estoy seguro de esto, pero sólo un pensamiento 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here