簡體   English   中英

為什么我的表單會在DragDrop上顯示背景?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM