2009-02-17 13 views
11

Questo è molto strano:di ListView non ha sollevato (AllowDrop = True)

mia app funziona bene, ma improvvisamente gli eventi del controllo ListView dannatamente non risorgono più. Va e viene senza una ragione chiara. (Ovviamente) ho impostato la proprietà AllowDrop True e gestito la DragEnter, eventi DragOver e DragDrop come segue:

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 

Non importa quello che il codice che ho scritto in questi due metodi, perché nessuno degli eventi sono sollevato. C'è qualcosa che mi manca qui?


Ho eseguito la stessa app su un'altra macchina e ha funzionato bene. Ho quindi riavviato la mia macchina e tutto ha ripreso a funzionare. Non sono sicuro, ma sembra che qualcosa non andasse in Windows.

risposta

1

Il modulo stesso ha la proprietà AllowDrop impostata su true?

+0

Sì. È strano che funzioni per un po ', ma si interrompe improvvisamente. – TheAgent

+0

Qualcosa potrebbe cambiare il valore di AllowDrop da qualche parte nel codice? –

+0

Ho controllato. Il valore della proprietà è True e intatto. – TheAgent

0

Hai provato a eliminare gli stub del gestore del metodo, a ricompilarlo, quindi a reinserirlo e compilarlo di nuovo? So che sembra strano ma ci sono stati momenti in cui avevo solo bisogno di resettare le mie copie di lavoro.

1

Se si verifica un comportamento intermittente, potrebbe essere possibile che un'eccezione si verifichi con i gestori e un'interruzione involontaria del trascinamento. Prova ad aggiungere una coperta Try/Catch al codice e fai un Debug.Fail nel blocco Catch. Questo almeno escluderà la possibilità che un'eccezione non gestita sia il tuo problema.

3

Appena ricordato, l'abbiamo già visto molto tempo fa.

Credo che accada in questo modo:

Drag and drop funziona bene fino a un certo codice utente genera un'eccezione nel corso di un'operazione di trascinamento.

L'eccezione sarà consumata; non avrai nessuna finestra di errore (provalo tu stesso e vedi). Dopo questo punto, il drag and drop smetterà di funzionare.

+0

Non ha iniziato a funzionare anche quando ho chiuso l'app ed eseguo di nuovo. Non penso che si tratti di un'eccezione generata. Ma non sono sicuro. – TheAgent

1

È possibile che la creazione del tuo controllo sia in corso, in qualche modo. Sei sicuro che l'handle esista e che sia stato eseguito il set completo del codice di inizializzazione?

Recentemente ho riscontrato un problema simile in cui Control.OnHandleCreated non veniva eseguito a causa di un errore che ho commesso e questo ha provocato tutti i tipi di cattiva qualità, incluso esattamente quello che stai descrivendo qui.

+1

+1 Ho corretto un bug con gli stessi sintomi, ad esempio il trascinamento della selezione ha smesso di funzionare. Venuto fuori che avevo sovrascritto OnHandleCreated ma non riuscivo a chiamare l'implementazione di base. Ciò ha anche avuto l'effetto strano che l'evento DragEnter è stato inviato al controllo padre. –

4

Ho riscontrato questo problema durante l'esecuzione di Visual Studio 2008 su Windows 7. VS2008 deve essere eseguito con privilegi di amministratore su Windows 7, quindi lo sto eseguendo come un altro utente. Sono abbastanza sicuro che questo impedisca il drag-and-drop mentre l'applicazione funziona correttamente quando viene eseguita come un'app, ma il trascinamento della selezione non funzionerà quando viene eseguito da Visual Studio.

+0

Stranamente questo è ciò che stava causando i miei problemi. Non sono stato in grado di trovare dettagli sul motivo per cui questo accade però. Grazie comunque! – Spyros

8

Ho appena avuto ore di miseria con un problema simile. tre requisiti obbligatori per il drag and drop per il lavoro:

  1. assicurarsi che il proprio obiettivo di UI Element ha AllowDrop="True", non è necessario questo per l'intera applicazione, proprio l'elemento che si desidera abilitare.
  2. Alcuni elementi non ricevono determinati eventi del mouse (incluso d & d) se il loro sfondo non è impostato. Background="Transparent" farà.
  3. L'esecuzione di qualsiasi programma con privilegi di amministratore non funzionerà con il trascinamento della selezione. assicurati di avviare lo studio visivo senza i privilegi di amministratore.
+0

Sciocco! Ho dimenticato le proprietà AllowDrop. Grazie mille. –

+0

Questa parte dell'amministratore è la chiave. Stavo diventando pazzo cercando di capire come io e un collega stessimo eseguendo lo stesso codice ma gli eventi non mi hanno sparato (perché stavo correndo come amministratore) ma erano per lui. –

Problemi correlati