2009-02-17 19 views
11

Éste es muy raro:de ListView no se levantó (AllowDrop = True)

Mi aplicación funciona muy bien, pero de repente los eventos del control ListView maldita no resucitan más. Simplemente viene y se va sin una razón clara. (Obviamente) He puesto la propiedad AllowDrop en True y manejó la DragEnter, eventos y DragOver DragDrop de la siguiente manera:

Private Sub lstApplications_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lstApplications.DragDrop, Me.DragDrop 
    m_fileNames = CType(e.Data.GetData(DataFormats.FileDrop), String()) 
    mnuType.Show(Cursor.Position, ToolStripDropDownDirection.BelowLeft) 
End Sub 

Private Sub lstApplications_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lstApplications.DragEnter, Me.DragEnter, lstApplications.DragOver, Me.DragOver 
    If chkMode.Checked OrElse Not e.Data.GetDataPresent(DataFormats.FileDrop, True) Then 
     e.Effect = DragDropEffects.None 
    Else 
     e.Effect = DragDropEffects.Copy 
    End If 
End Sub 

No importa qué código que he escrito en estos dos métodos, ya que ninguno de los eventos están elevado. ¿Hay algo que me falta aquí?


Ejecuto la misma aplicación en otra máquina y funcionó bien. Luego reinicié mi propia máquina y todo comenzó a funcionar nuevamente. No estoy seguro, pero parece que algo estaba mal con Windows.

Respuesta

1

¿El formulario en sí tiene su propiedad AllowDrop establecida en verdadero?

+0

Sí. Es extraño que funcione por un tiempo, pero se rompe de repente. – TheAgent

+0

¿Hay algo que cambie el valor de AllowDrop en algún lugar de tu código? –

+0

Lo revisé. El valor de la propiedad es Verdadero e intacto. – TheAgent

0

¿Ha intentado eliminar los trozos del controlador de métodos, volver a compilarlos, volverlos a colocar y volver a compilar? Sé que suena raro, pero ha habido ocasiones en que solo necesitaba restablecer mis copias de trabajo.

1

Si obtiene un comportamiento intermitente, es posible que se esté produciendo una excepción en sus manejadores y una caída de arrastre inadvertidamente desconectada. Intenta agregar un bloque de Prueba/Captura alrededor de tu código y haz una depuración. Falla en el bloque de captura. Eso al menos descartará la posibilidad de que una excepción no controlada sea su problema.

3

Acabo de recordar que hemos visto esto antes, hace mucho tiempo.

creo que suceda así:

de arrastrar y soltar funciona bien hasta que un código de usuario lanza una excepción durante una operación de arrastrar y soltar.

Se cometerá la excepción; no obtendrá ningún diálogo de error (pruébelo usted mismo y vea). Después de este punto, la función de arrastrar y soltar dejará de funcionar.

+0

No comenzó a funcionar incluso cuando cerré la aplicación y la volví a ejecutar. No creo que se trate de una excepción lanzada. Pero no estoy seguro. – TheAgent

1

Es posible que la creación de su control esté siendo grabada, de alguna manera. ¿Está seguro de que existe el identificador y de que se ha ejecutado el conjunto completo del código de inicialización?

Recientemente me encontré con un problema similar donde Control.OnHandleCreated no se estaba ejecutando debido a un error que cometí, y esto dio lugar a todo tipo de maldad, incluyendo exactamente lo que está describiendo aquí.

+1

+1 Acabo de corregir un error con los mismos síntomas, es decir, arrastrar y soltar dejó de funcionar. Resultó que había reemplazado a OnHandleCreated pero no pude llamar a la implementación base. Esto también tuvo el extraño efecto de que el evento DragEnter pasó al control principal. –

4

Tuve este problema al ejecutar Visual Studio 2008 en Windows 7. VS2008 debe ejecutarse con privilegios de administrador en Windows 7, así que lo estoy ejecutando como un usuario diferente. Estoy bastante seguro de que esto evita que Arrastrar y Soltar funcione, ya que la aplicación funciona bien cuando se ejecuta como una aplicación, pero arrastrar y soltar no funcionará cuando se ejecute desde Visual Studio.

+0

Por extraño que parezca esto es lo que estaba causando mis problemas. Sin embargo, no pude encontrar ningún detalle sobre por qué sucede esto. ¡Gracias de cualquier manera! – Spyros

8

yo sólo tenía horas de la miseria con un problema similar. tres requisitos obligatorios para arrastrar y soltar para el trabajo:

  1. asegurarse de que su interfaz de usuario de destino Element tiene AllowDrop="True", que no necesitan esto para toda la aplicación, sólo el elemento que desea que desee habilitar.
  2. Algunos elementos no reciben ciertos eventos de mouse (incluido d & d) si su fondo no está configurado. Background="Transparent" va a hacer.
  3. Al ejecutar cualquier programa con privilegios de administrador, se perderá arrastrando y soltando. asegúrese de iniciar visual studio sin privilegios de administrador.
+0

¡Tonto! Me olvidé de las propiedades AllowDrop. Muchas gracias. –

+0

Esa parte del administrador es la clave. Me estaba volviendo loco intentar descubrir cómo yo y un colega estábamos ejecutando el mismo código, pero los eventos no estaban funcionando para mí (porque me estaba ejecutando como administrador) pero eran para él. –

Cuestiones relacionadas