在不使用Enabled=false的情况下防止窗体上的点击



我有一个需要长时间操作的表单(树视图节点的扩展在网络中搜索额外的项目以创建更多的树节点)-所以我计划使用BackgroundWorker来完成此任务。在长操作期间,我希望光标是等待光标,我希望整个表单是不可点击的,除了取消按钮。我知道我可以使用Enabled=false,但这会使treeview变成灰色,看起来很蹩脚。

我可以不使用BW,但这意味着我必须使用DoEvents来改变光标,并且可能会显示"不响应",这是我讨厌的。

我想处理所有的鼠标点击事件和键盘事件,使他们被取消,如果BW是繁忙的…这就是我目前的计划。我只是想知道我是否错过了什么,如果有其他的方法。

谢谢。

要做到这一点并不容易。最好修复你的树视图和使用Enabled属性。你也可以在模态对话框中显示你的进度条——这会阻塞UI

你可以使用Panel作为覆盖在表单上,完全或部分透明,它只在取消按钮上传播点击——类似于浏览器模拟模态窗口的方式,通过覆盖将背景"变灰"。

当你处于处理模式时,将遮罩的Z-Order设置为在所有其他控件的前面,当完成后将其设置为在它们的后面。

你可以使用后台工作器并弹出另一个带有进度条的对话框,显示当前进度和取消按钮。在这里可以使用

popup = new ProgressWindow();
popup.Owner=this;
popup.show();

取消按钮将取消后台worker。这样,你的后台表单将无法点击,弹出框将保留在顶部,并带有取消按钮。

相关内容

最新更新