2016-11-18 61 views
0

我有一個ListBox的元素,我需要顯示的元素,我有工作,但我想添加一個選項來刪除選定的項目,這裏是問題...我刪除它,但我是從列表框中刪除而不是從元素類,我能做些什麼來從樹中刪除項目?這裏是我的代碼:複合設計模式

表1:

private void btnBuildPartsList_Click(object sender, EventArgs e) 
{ 
    Assembly topWidget = new Assembly("Main Assembly", 1); 
    Assembly chassis = new Assembly("Chassis", 1); 
    Assembly display = new Assembly("Display", 1); 
    Assembly powerSupply = new Assembly("Power Supply", 1); 
    Part bolt = new Part("Bolt", 24); 
    Part mainCase = new Part("Case", 1); 
    Part screen = new Part("Screen", 3); 
    Part displayElectronics = new Part("Display Electronics", 3); 
    Part transformer = new Part("Transformer", 1); 
    Part powerBoard = new Part("Power Board", 1); 
    Part ductTape = new Part("Duct Tape", 5); 
    Part gum = new Part("Bubble Gum", 25); 

    topWidget.Add(chassis); 
    topWidget.Add(display); 
    topWidget.Add(powerSupply); 
    chassis.Add(mainCase); 
    chassis.Add(bolt); 
    display.Add(screen); 
    display.Add(displayElectronics); 
    powerSupply.Add(transformer); 
    powerSupply.Add(powerBoard); 
    topWidget.Add(ductTape); 
    topWidget.Add(gum); 

    DisplayPartsList(topWidget); 
} 

private void DisplayPartsList(Assembly topWidget) 
{ 
    List<string> partsList = new List<string>(); 
    topWidget.WritePartsList(partsList); 

    listParts.Items.Clear(); 
    listParts.Items.AddRange(partsList.ToArray()); 
} 

,這裏是我的組裝類:

namespace Composite 
{ 
    public class Assembly : BaseAssembly 
    { 
     private List<BaseAssembly> elements = new List<BaseAssembly>(); 

     public Assembly(string name, int quantity) 
      : base(name, quantity) 
     { 
     } 

     public override void Add(BaseAssembly assembly) 
     { 
      elements.Add(assembly); 
     } 

     public override void Remove(BaseAssembly assembly) 
     { 
      elements.Remove(assembly); 
     } 

     public override void WritePartsList(List<string> list) 
     { 
      list.Add(Quantity.ToString() + " - " + Name); 

      foreach (BaseAssembly assembly in elements) 
      { 
       assembly.WritePartsList(list); 
      } 
     } 
    } 
} 

我認爲這個代碼就足夠了,其他所有的代碼,它就像在其它複合設計模式代碼,現在,我該如何去除項目功能?從我的列表框中選擇x元素。就像我在從the listbox中刪除該項目之前所說的,但我想從全班級中刪除它。提前致謝。

+0

[連接列表到列表框](https://stackoverflow.com/questions/33623991/connect-listt-to-a-listbox) –

+0

@RezaAghaei好吧,我明白,但我不明白如何將該代碼應用於我的項目,你能解釋我的方法嗎?我真的在努力,但我不知道該怎麼做 – User1899289003

回答

1

我有一個解決方案,首先把這個代碼全局變量:

Assembly topWidget = new Assembly("Main Assembly", 1);  
Assembly chassis = new Assembly("Chassis", 1); 
Assembly display = new Assembly("Display", 1);  
Assembly powerSupply = new Assembly("Power Supply", 1);  
Part bolt = new Part("Bolt", 24);  
Part mainCase = new Part("Case", 1); 
Part screen = new Part("Screen", 3); 
Part displayElectronics = new Part("Display Electronics", 3); 
Part transformer = new Part("Transformer", 1); 
Part powerBoard = new Part("Power Board", 1); 
Part ductTape = new Part("Duct Tape", 5); 
Part gum = new Part("Bubble Gum", 25); 

之後,你需要處理delete功能你打算怎麼做呢?使用按鈕或僅從列表框中選擇元素?這取決於你,我會給你的代碼,然後你只改變你需要的東西。

你的元件具有這樣的結構,例如:


A,B
A,B,C

在這種情況下,A是topWidget B是chassis, display, powerSupply和C是mainCase, bolt, screen, displayElectronics... etc通過該信息,您可以選擇要刪除的內容,換句話說,如果刪除B element,您將刪除所有的C elements too,因此您需要選擇是否需要要刪除C element或全部B elements,您可以使用switch執行此操作,並且需要發送什麼? The selected item from the ListBox但是,您的ListBox包含這樣的項目:24 - Bolt對不對?那麼你只需要進行拆分即可獲得Bolt或其他任何東西。

var select = listParts.SelectedItem.ToString().IndexOf('-'); 
string selectVal = listParts.SelectedItem.ToString().Substring(select + 1).Trim(); 

有了,你會得到相同的字符串添加,在你只需要處理switch並使用Remove功能,這樣的事情:

switch (selectVal) 
{ 
    //This will remove all the elements of powerSupply (transformer, powerBoard) 
    case "Power Supply": 
     topWidget.Remove(powerSupply); 
     break; 
} 

或者你也可以做到這一點,以刪除C element one by one

switch (selectVal) 
{ 
    //This will remove only "Transformer". 
    case "Transformer": 
     powerSupply.Remove(transformer); 
     break; 
} 

請記住,在開關後,你需要刷新列表框(call again DisplayPartsList(topWidget);)

你可以結合兩種情況沒有問題,我希望這可以幫助你。

+0

完美的作品!謝謝!! – User1899289003