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