[英]Why is my form going to background on DragDrop?
拖放操作結束時,我正在使用ShowDialog
顯示一個表單。
問題:關閉窗體后,我的主窗體被推到任何其他應用程序窗口的后面。
碼:
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);
// ...
}
問題:我該怎么做才能使主要表格停留在最前面?
您的ShowDialog()調用阻止了DragDrop事件。 這非常非常糟糕,它會拖累拖動源並使它變成陽離子,並且對Windows消息無響應。 這會產生各種副作用,例如您的窗戶也會發生陽離子變化,或者由於D + D操作尚未完成而無法重新激活。
僅完成d + d操作之后顯示的對話框中避免這種情況。 利用Winforms管道的出色表現,該管道允許將消息發布到消息隊列中,並在以后進行處理。 像這樣:
private void ctl_DragDrop(object sender, DragEventArgs e) {
//...
this.BeginInvoke(new Action(() => {
viewHelperForm.ShowDialog(view.TopLevelControl);
}));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.