0

耐心点,不知道如何最好地问这个......

  1. 我在 Windows 窗体上有一个 listView 控件,我向其中添加了作为特定目录中文本文件名称的项目。
  2. 这些文件中的每一个都作为对象“ResultFile”加载,并根据其中的文本分配了许多属性 - “string Type”、“int NumberOfLines”、“bool IsGeneric”等。
  3. 用户可以自由选择/取消选择,但我想根据他们已经选择的文本文件类型做出决定。作为一个粗略的想法,如果他们已经选择了一个 "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”类型,并且可以访问要制作的属性决定,但我找到了“标签”属性,并认为我可以将我的对象绑定到它并直接访问它们的项目。我查看了MSDN,它说我可以附加“任何”对象,但我不知道如何使用它。

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

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

似乎是我能做的最多的了……

我是否缺少有关 ListViewItem.Tag 属性的内容?

4

1 回答 1

2

Tag属性接受任何类型的对象object,因此从 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().

于 2013-04-20T00:51:39.710 回答