0

我在 SCSF 项目中工作,并TabWorkSpace使用以下代码添加了多个视图:

ControlledWorkItem<MyController> controller;
                controller = WorkItem.Items.AddNew<ControlledWorkItem<MyController>>();
                controller.Controller.Run(WorkItem.Workspaces[WorkspaceNames.RightWorkspace]);
                controller.Activate();

当我单击它时我有一个按钮,它将使用以下代码关闭所有打开的选项卡:

foreach (var item in WorkItem.RootWorkItem.Workspaces[WorkspaceNames.RightWorkspace].SmartParts)
{
    itemToclose = (UserControl)item;
    if (itemToclose.InvokeRequired)
    {
        itemToclose.Invoke(new MethodInvoker(delegate
        {
            WorkItem.RootWorkItem.Workspaces[WorkspaceNames.RightWorkspace].Close(itemToclose);
        }));
    }
}

单击该按钮后,所有智能部件都将关闭,但仍会在 Items 集合中找到。
如何在项目集合中删除这些智能部件?

4

1 回答 1

0

根据您提供的代码,最简单的解决方案是在您的委托中添加 WorkItem.RootWorkItem.Items.Remove(itemToClose)。

您应该注意的一件事是,您的基础 Presenter 类(如果您使用 SCSF 指导创建模块)包含一个 Dispose 方法,该方法从工作项的 Items 集合中删除相关视图。

他们设置它的方式是,当属于特定工作项的所有工作区都关闭时,我调用 Workitem.Dispose 以确保从集合中删除所有 SmartPart。

希望这可以帮助!

于 2013-03-13T16:33:38.503 回答