我可以访问ListViewItem.Tag的属性而不仅仅是“ToString”方法吗?

时间:2013-04-20 00:43:40

标签: c# winforms listview inheritance

要有耐心,不确定如何最好地问这个......

  1. 我在Windows窗体上有一个listView控件,我向它添加了一些项目,这些项目是某个目录中文本文件的名称。
  2. 每个文件都作为对象“ResultFile”加载,并根据文本分配了许多属性 - “string Type”,“int NumberOfLines”,“bool IsGeneric”等。
  3. 用户可以自由选择/取消选择,但我想根据他们已经选择的文本文件类型做出决定。作为一个粗略的想法,如果他们已经选择了一个“Type ==”x1“我不希望他们能够选择另一个。如果他们选择2或更多的IsGeneric == true,我想给他们是警告......
  4. 我首先使用此

    扩展ListViewItem
    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)
        { }
    }
    

    我很满意这是因为这是我第一次扩展控件(是的,我是新手)...这允许我添加自己类型的“ListViewItems”,我可以访问做出决定的属性,但我找到了“标签”属性,并认为我可以将我的对象绑定到它并直接访问它们的项目。我看了MSDN,它说我可以附上“任何”物品,但我不知道如何使用它。

    除了访问默认对象方法之外,我似乎无能为力。

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

    似乎是我能做的最多......

    我是否遗漏了有关ListViewItem.Tag属性的内容?

1 个答案:

答案 0 :(得分: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()