我有一个带有元素的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中删除该项,但我想从所有类中删除它。提前谢谢。
发布于 2016-11-19 17:21:48
我有一个解决方案,首先把这段代码作为全局变量:
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;
}请记住,在切换之后,您需要刷新ListBox (call again DisplayPartsList(topWidget);)
你可以把这两种情况结合起来,没有问题,希望这对你有帮助。
https://stackoverflow.com/questions/40668799
复制相似问题