没有对话框就把注意力集中在儿童形

时间:2011-01-22 11:52:07

标签: vb.net

我有一个无边框表单显示为进度对象。这通过childform.show()显示。

我重写CS_DROPSHADOW给它阴影(如图), 当表单失去焦点(父项单击或其他表单\应用程序)时,阴影将丢失。

如何使表单集中\选择类似于模态表单? (我不能使用showdialog,因为这是从UI以外的各种线程调用的)使用Me.TopMost = True工作,但显然将表单放在所有其他线程之上,而不仅仅是父级。

alt text

1 个答案:

答案 0 :(得分:1)

只要你在工作线程中创建这个窗口,那么你真的被TopMost = true所困扰。 Winforms不允许您使用Show(owner)重载,它会在检测到父线程由UI线程拥有时抛出InvalidOperationException。只需调用Show()就可以将桌面窗口作为所有者。这是一个问题,进度窗口可能会消失在另一个窗口后面,用户无法轻易将其取回。由于它是异步的,这很容易发生用户在UI窗口中工作时,她甚至可能从未注意到弹出窗口。

只是解决了这个问题,使用Control.BeginInvoke()让方法在UI线程上创建对话框。现在你可以调用ShowDialog(),你的所有问题都解决了。