2014-01-28 5 views
0

В конце перетаскивания & операция удаления, я показываю форму, используя ShowDialog.
Проблема: Когда форма закрыта, моя основная форма перемещается за любые другие окна приложений.Почему моя форма переходит на задний план на DragDrop?

Код:

private void ctrl_DragDrop(object sender, DragEventArgs e) { 
    // ... 
    if (e.Effect == DragDropEffects.Move) { 
    string name = e.Data.GetData(DataFormats.Text).ToString(); 
    viewHelperForm.ShowDialog(view.TopLevelControl); 
    // ... 
} 

Вопрос: Что я могу сделать, что основная форма остается на вершине?

+0

Когда открытая форма закрыта, какие-либо события увольняются по основной форме? – Brandon

+0

Вы ловите шоу? как событие a = newWindow.ShowDialog(); – Master117

ответ

3

Ваш вызов ShowDialog() блокировка событие DragDrop. Это очень, очень плохо, он подталкивает источник перетаскивания и делает его кататоническим и не отвечает на сообщения Windows. У этого есть все виды побочных эффектов, например, ваше окно также каталоническое или не активируется, так как операция D + D еще не завершена.

Избегайте этого, только отображая диалоговое окно после операция D + D завершена. Элегантно сделано, используя преимущества сантехники Winforms, которая позволяет размещать сообщение в очереди сообщений и обрабатывать его позже. Примерно так:

private void ctl_DragDrop(object sender, DragEventArgs e) { 
     //... 
     this.BeginInvoke(new Action(() => { 
      viewHelperForm.ShowDialog(view.TopLevelControl); 
     })); 
    } 
Смежные вопросы