2016-11-18 33 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