【问题标题】:Why is my form going to background on DragDrop?为什么我的表单会在 DragDrop 上变为背景?
【发布时间】:2014-01-28 13:26:44
【问题描述】:

在拖放操作结束时,我使用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了吗?像事件 a = newWindow.ShowDialog();

标签: c# winforms drag-and-drop z-order


【解决方案1】:

您的 ShowDialog() 调用正在阻止 DragDrop 事件。那是非常非常糟糕的,它会弄乱拖动源并使其变得紧张并且对 Windows 消息没有响应。这会产生各种副作用,例如 您的 窗口也会紧张,或者由于 D+D 操作尚未完成而无法重新激活。

通过仅在 D+D 操作完成后显示对话框来避免这种情况。通过利用允许将消息发布到消息队列并稍后处理它的 Winforms 管道来优雅地完成。像这样:

    private void ctl_DragDrop(object sender, DragEventArgs e) {
        //...
        this.BeginInvoke(new Action(() => {
            viewHelperForm.ShowDialog(view.TopLevelControl);
        }));
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    相关资源
    最近更新 更多