我是一位经验丰富的WinForms开发人员。我有一个过去运作良好的MdiApplication。但是,最近我们使用ComponentOne RibbonForm的应用程序的主shell已经大大更新了。此更新确实影响了我们的其他第三方组件,我们建立的组件是由于ComponentOne在其事件代码中使用DoEvents()
。我以为我已经清理了导致问题的所有代码,但我现在找到了另一个......
当我打开多个MdiChildren
并从功能表单上的按钮点击事件中选择其中一个时,通过
document.Activate();
document.EditorControl.Select();
document.EditorControl.Focus();
其他打开的MdiChildren
文档仍然具有焦点,表单突出显示,并且未在我在代码中设置的文档上设置输入。两个问题:
如何确保我想要激活的Form
是仅哪个有效?
链接到上述内容;使用form.Activate()
将一个表单设置为活动状态应该停用其他表单MdiChildren
,但事实并非如此 - 如何在代码中停用其他窗口?
感谢您的时间。
答案 0 :(得分:1)
[评论太长]
我在与C1战斗的后牙上生病了。 ESP。功能区。我已经在他们的支持下证实他们确实使用DoEvents()
来使用他们的Gui线程。我现在要切换到DevExpress,这应该是我的MVC应用程序的直接...
C1使用DoEvents()
会混淆应用程序的正常流程。 DoEvents()
是异步的,这意味着它在应用程序实际处理任何未完成事件之前终止,因此如果您在具有许多顺序语句的过程中使用它,则调用DoEvents()
会在调用时引起巨大的干扰。这就是我们在执行MDI操作时所看到的情况,但是如果没有C1源代码我们就无法确定。
我希望这会有所帮助。