我正在使用UltraTabbedMdiManager作为C#winform应用程序。每个选项卡一次添加一个并显示唯一的表单。选项卡面板嵌套在其父窗体中。我遇到了与新标签实例化相关的两个问题。
问题#1:在添加新选项卡时,整个选项卡平面向下移动,在父表单(Mdi容器)顶部显示一个条带,位于其标题栏的下方。单击其他选项卡或父窗体上的其他选项卡时,选项卡平面将恢复其原始位置。此条带仅在创建新选项卡时出现,并在焦点丢失后立即消失(通过单击其他位置)。它也只出现在生成的每个第二个选项卡上,这表示新选项卡上的激活焦点问题。在已生成的选项卡之间单击或删除选项卡时,不会发生此问题。
我找到了解决此问题的方法:在创建选项卡及其表单后,遍历mdi管理器中的所有选项卡并禁用它们。然后立即重复此迭代,启用所有选项卡。然后新的标签被反应。这些步骤强制丢失然后重新获得焦点然后激活选项卡(N.B.没有激活,前一个选项卡将处于活动状态)。以下是执行此操作的(详细)代码:
var activeTab = MdiTabManager.ActiveTab;
foreach (var tabgroup in MdiTabManager.TabGroups)
{
foreach (var tab in tabgroup.Tabs)
{
tab.Form.Enabled = false;
}
}
foreach (var tabgroup in MdiTabManager.TabGroups)
{
foreach (var tab in tabgroup.Tabs)
{
tab.Form.Enabled = true;
}
}
activeTab.Activate();
问题#2:关于生成一些新选项卡。表单向下移动,并在新选项卡上显示上一个选项卡顶部的控件(但不活动)。就好像它们叠加在新标签上一样。像之前一样的类似工作解决了这个问题;我在另一篇infragistics论坛帖子中读过这篇文章。但是这次选项卡的表单ShowInTaskbar属性设置为false然后为true(在遍历所有mdi管理器选项卡之后)。
但是,如果依赖于Application.OpenForms集合,解决方法会产生副作用。调用ShowInTaskbar将有效地从此集合中删除打开的表单(这里描述的已知Windows窗体错误Application.OpenForms.Count = 0 always)。不幸的是我的应用程序依赖于这个集合。所以我的解决方法不适用于我的应用程序。但是,它可能对其他不依赖于OpernForms集合的设计很有用。
这两个问题可能是相关的。也许在后来的infragistics版本中解决了。 Infragistics确实建议升级。在此之前,有没有人遇到过这样的问题?
仅供参考我们的应用程序的更多信息。包含mdi管理器的表单是从我们的应用程序的主表单启动的。这个主窗体也使用UltraTabbedMdiManager但确实存在这些问题。因此,在同一项目或解决方案中拥有多个mdi管理器是否存在已知问题?
以下是我的环境详情:
Infragistics v14.1,.Net v4.7,Visual Studio 2017 Enterprise,C#7.0,WinForms