2017-09-06 44 views
0

我有一个关于使用“标签”的问题:C#删除标记的对象,

我有一个列表框,或ListView,其中我有我的对象的名字,我就将此“标签”属性来找到它相应的对象:

foreach(Operation op_ass in ListOpAss1) 
    { 
     op_ass.getNom(Properties.Settings.Default.Langue); 
     ListViewItem item = new ListViewItem(op_ass.Nom); 
     item.Tag = op_ass; 
     listBoxAss1.Items.Add(op_ass.Nom); 
    } 

现在我想的东西,是当我选择在我的名单(或几个)的项目,做出相应的对象的操作。但是我怎么能找回他们? 例如,我想从列表中删除选定的对象,或者获取操作ID列表(不在列表中显示ID)。

回答

2

列表看起来你添加的属性,op_ass.Nom到列表框,而不是ListViewItem的,item。修改代码如下:

foreach (Operation op_ass in ListOpAss1) 
    { 
     op_ass.getNom(Properties.Settings.Default.Langue); 
     ListViewItem item = new ListViewItem(op_ass.Nom); 
     item.Tag = op_ass; 

     // Add the list view item instead of op_ass.Nom 
     listBoxAss1.Items.Add(item); 
    } 

现在你应该能够从选定的项目/项检索标签如下:

var operation = ((listBox1.SelectedItem as ListViewItem).Tag) as Operation; 

或者,你可以考虑使用数据绑定如下:

foreach (Operation op_ass in ListOpAss1) 
    { 
     op_ass.getNom(Properties.Settings.Default.Langue); 
    } 

listBoxAss1.DataSource = ListOpAss1; 
listBoxAss1.DisplayMember = "Nom"; 

并访问数据绑定对象如下:

var operation = listBox1.SelectedItem as Operation; 
+0

完美工作,谢谢。只是为了取回选定的项目,你的语法不起作用,我只是把这个:var operation = listBoxAss1.SelectedItem as Operation;并作为一个魅力工作,标签甚至不需要,因为我的listBox包含所有的对象:) –

+0

不客气.. :)如果你使用数据绑定,那么后一种铸造方式是前进的道路..前者一个(铸造到ListViewItem)将无法与数据绑定 – ashin

+0

对不起,没有注意到最后一行,以及无论如何谢谢你解决了我的问题:) –

-1

使用的foreach是一种过时,你可以考虑实现的功能在对象

ListOpAss1.ForEach(x=> 
{ 
    x.getNom(Properties.Settings.Default.Langue); 
    var item = new ListViewItem(x.Nom); 
    item.Tag = x; 
    listBoxAss1.Items.Add(x.Nom); 
}); 

的列表,以便在列表中你可以使用SingleOrDefalt()或跳过(计数)需要选择一个项目(计)多个文件,也可以运行条件本土querys搜索这样

var items = collection.Where(x=> x.City == "Burgas").ToList(); //You can use select if you want only certain properties of the object to be selected 
///then you can use that new item list to remove the objects from the collection list like this 
items.ForEach(x=> 
{ 
    collection.Remove(x); 
}); 
+1

“使用foreach有点过时”。说什么?不,不,不。 – DonBoitnott

+0

你的回答并不能解决问题。你刚刚以一种新的,同样错误的方式重写了它。像所讨论的代码一样,你永远不会将“item”添加到任何东西。 – DonBoitnott

+0

那么使用已实现的ForEach on列表更有效率并且可以节省一些空间,毕竟为什么微软的人们如果不能以旧的方式使用新的实现方法,那么请注意代码小得多且可以更改。这就是我的意思,不赞成使用它......我很少使用它,但所有人都可以做任何他想做的事) –