2013-04-20 96 views
0

要有耐心,不能确定如何最好地问这一个...我可以访问ListViewItem.Tag的属性而不仅仅是“ToString”方法吗?

  1. 我有一个Windows窗体上的ListView控件和我添加项目是在某一目录下的文本文件的名称。
  2. 每个这些文件被加载为对象“ResultFile”并被分配基于内文本许多属性 - “字符串输入”,“INT NumberOfLines”,“布尔IsGeneric”等
  3. 用户可以选择/取消选择自由,但我想根据他们已经选择的文本文件类型作出决定。作为一个粗略的想法,如果他们已经选择了“Type ==”x1“我不希望他们能够选择另一个。如果他们选择2或更多的IsGeneric == true,我想给他们警告...

我开始用这个

public class MyListViewItem : ListViewItem 
{ 
    public string Type { get; set; } 
    public int NumberOfLines { get; set; } 
    public bool IsGeneric { get; set; } 

    public MyListViewItem(string s) 
     : base(s) 
    { } 
} 

我很高兴这个因为这是我第一次延长控制(是的,我是延长的ListViewItem新的这个)...这使我可以添加我自己的“ListViewItems”类型,我可以访问属性做出决定,但我发现了“标签”属性,并认为我可以将我的对象绑定到它并访问它们的项目直接。我看着MSDN和它我可以附加“任何”对象,但我不知道如何使用它。

我似乎无法做任何事情,除了访问默认的对象方法。

 myListView.Item[1].Tag.ToString(); 

好像是我所能做的最...

我失去了一些关于ListViewItem.Tag物业?

+0

这是Winforms还是WPF? – slugster 2013-04-20 00:48:11

+0

WinForms - 刚更新谢谢。 – Sisyphus 2013-04-20 00:51:06

回答

2

Tag属性采用任何类型为object的对象,因此任何从对象继承的类都可以存储在其中。所以,如果你有过这样的对象:

public class MyItem 
{ 
    public string Type { get; set; } 
    public int NumberOfLines { get; set; } 
    public bool IsGeneric { get; set; } 
} 

您可以将对象分配到标记字段,就像这样:

var myobj = new MyItem(); 
myobj.Type = "Type 1"; 
myListView.Items[1].Tag = myobj; 

和检索像这样的对象:

var myobj = (MyItem)myListView.Items[1].Tag; 
var type = myobj.Type; 

只有在投射到MyItem后,才能访问您的自定义属性。否则,您只能获得object属性和方法,其中之一是.ToString()

+0

所以我不能直接访问属性,但必须将它们挖回到对象中才能测试......?我会继承和继承自己的自定义ListViewItem吗? – Sisyphus 2013-04-20 00:59:20

+0

现在有道理...... :) – Sisyphus 2013-04-20 01:00:33

相关问题