2012-12-22 48 views
0

我曾在SCSF項目,我用下面的代碼添加多個視圖中TabWorkSpace關閉後如何從Items集合中刪除智能部分?

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); 
     })); 
    } 
} 

點擊按鈕後,所有的smartparts都會關閉,但仍會在Items集合中找到。
如何刪除項目集合中的這些smartparts?

回答

0

基於您提供的代碼的最簡單解決方案是在您的代理中添加一個WorkItem.RootWorkItem.Items.Remove(itemToClose)。

需要注意的一件事是,您的基本Presenter類(如果您使用SCSF指導來創建您的模塊)包含一個Dispose方法,該方法將相關視圖從工作項目的Items集合中移除。

他們這樣做的方式是,當屬於特定工作項目的所有工作空間都關閉時,我會調用Workitem.Dispose,以確保從集合中刪除所有SmartPart。

希望這會有所幫助!