2013-04-20 94 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

相關問題