WinForms MdiChildren选择和激活

时间:2016-05-16 13:48:37

标签: c# winforms componentone

我是一位经验丰富的WinForms开发人员。我有一个过去运作良好的MdiApplication。但是,最近我们使用ComponentOne RibbonForm的应用程序的主shell已经大大更新了。此更新确实影响了我们的其他第三方组件,我们建立的组件是由于ComponentOne在其事件代码中使用DoEvents()。我以为我已经清理了导致问题的所有代码,但我现在找到了另一个......

当我打开多个MdiChildren并从功能表单上的按钮点击事件中选择其中一个时,通过

document.Activate();
document.EditorControl.Select();
document.EditorControl.Focus();

其他打开的MdiChildren文档仍然具有焦点,表单突出显示,并且未在我在代码中设置的文档上设置输入。两个问题:

  1. 如何确保我想要激活的Form哪个有效?

  2. 链接到上述内容;使用form.Activate()将一个表单设置为活动状态应该停用其他表单MdiChildren,但事实并非如此 - 如何在代码中停用其他窗口?

  3. 感谢您的时间。

1 个答案:

答案 0 :(得分:1)

[评论太长]

我在与C1战斗的后牙上生病了。 ESP。功能区。我已经在他们的支持下证实他们确实使用DoEvents()来使用他们的Gui线程。我现在要切换到DevExpress,这应该是我的MVC应用程序的直接...

C1使用DoEvents()会混淆应用程序的正常流程。 DoEvents()是异步的,这意味着它在应用程序实际处理任何未完成事件之前终止,因此如果您在具有许多顺序语句的过程中使用它,则调用DoEvents()会在调用时引起巨大的干扰。这就是我们在执行MDI操作时所看到的情况,但是如果没有C1源代码我们就无法确定。

我希望这会有所帮助。