将“Tag”属性添加到ListBox的项目,如TreeView的节点?

时间:2011-11-06 00:18:50

标签: .net winforms listbox

我正在创建一个Windows窗体项目,它将在我的业余时间搜索指定文件夹中的文件。到目前为止,我的TreeView显示文件夹就像在Windows资源管理器中一样。

我还有一个ListBox,可以存储所有搜索结果。当我双击该列表中的项目时,我想要打开该文件的选项。

到目前为止,我看到了三种方法:

  1. 让ListBox显示完整路径。
  2. 使用全局列表或数组来跟踪完整路径,而ListBox仅显示文件名。然后使用索引匹配相应的项目。
  3. 为我的每个ListBox项添加“Tag”属性,就像TreeView的节点一样。
  4. 对我而言,第三种方法最吸引人,但我不知道从哪里开始。到目前为止,我一直在摆弄控制库,但无济于事。

    我希望能够以类似于TreeView的方式使Tag工作。因此,如果前者不可能,则检索标记和设置标记的代码看起来像ListBox1.Items[i].TagListBox1.Tag[i]

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您应该使用返回完整路径的属性创建自定义SearchResult类 该类应覆盖ToString()并返回要在列表框中显示的文本。

然后,您可以将您的类的实例直接放入列表框中,并将列表框中的项目强制转换回类以获取属性。

答案 1 :(得分:1)

我会创建一个代表列表中项目的自定义类。您有表示要显示的值的属性(不是字段!),以及您可以在列表框的.DisplayMember和.ValueMember属性中输入该属性名称的选定值。 DisplayMember返回的任何内容都将显示为项目的文本,而.ValueMember返回的内容将是.SelectedValue返回的内容。您将能够直接访问.SelectedItem以获取所选的确切项目。这样您就可以存储任何您想要的项目。如果您未指定.DisplayMember,则列表框将在项目上使用.ToString函数。