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) を追加することです。

注意すべきことの 1 つは、ベースの Presenter クラス (SCSF ガイダンスを使用してモジュールを作成している場合) には、ワーク アイテムの Items コレクションから関連するビューを削除する Dispose メソッドが含まれていることです。

私が設定した方法は、特定の Workitem に属するすべてのワークスペースが閉じられたときに Workitem.Dispose を呼び出して、すべての SmartParts がコレクションから削除されるようにすることです。

お役に立てれば!

于 2013-03-13T16:33:38.503 に答える