首页 文章

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

提问于
浏览
0

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

  • 我在Windows窗体上有一个listView控件,我向它添加了一些项目,这些项目是某个目录中文本文件的名称 .

  • 这些文件中的每一个都作为对象"ResultFile"加载,并根据"string Type","int NumberOfLines","bool IsGeneric"等文本分配了许多属性 .

  • 用户可以自由选择/取消选择,但我想根据他们已经选择的文本文件类型做出决定 . 作为一个粗略的想法,如果他们已经选择了一个"Type==" x1“我不希望他们能够选择另一个 . 如果他们选择2或更多IsGeneric == true,我想给他们一个警告 . ..

我首先使用此扩展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"类型,我可以访问属性来做出决定但是我找到了"tag"属性并认为我可以只需将我的对象绑定到它并直接访问它们的项目 . 我看了MSDN,它说我可以附加"ANY"对象,但我不知道如何使用它 .

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

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

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

我错过了关于ListViewItem.Tag属性的一些内容吗?

1 回答

  • 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() .

相关问题