0

辛抱してください。これをどのように尋ねるのが最善かわかりません...

  1. Windows フォームに listView コントロールがあり、特定のディレクトリ内のテキスト ファイルの名前である項目を追加します。
  2. これらの各ファイルはオブジェクト「ResultFile」としてロードされ、「string Type」、「int NumberOfLines」、「bool IsGeneric」などのテキストに基づいて多くのプロパティが割り当てられます。
  3. ユーザーは自由に選択/選択解除できますが、既に選択したテキスト ファイルの種類に基づいて決定したいと考えています。大まかな考えとして、"Type=="x1" の 1 つを既に選択している場合、別の 1 つを選択できないようにしたい. IsGeneric==true の 2 つ以上を選択した場合は、彼らに警告...

これで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を見たところ、「ANY」オブジェクトをアタッチできるとのことでしたが、使い方がわかりません。

デフォルトのオブジェクトメソッドにアクセスする以外に何もできないようです。

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

私にできる最大限のことのようです...

ListViewItem.Tag プロパティについて何か不足していますか??

4

1 に答える 1

2

このTagプロパティは type の任意のオブジェクトを取る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そのうちの 1 つは.ToString().

于 2013-04-20T00:51:39.710 に答える