3

WinForms アプリ (3.5 ランタイム) に CheckedListBox があり、一連の FileInfo オブジェクトを Items ObjectCollection に追加しています。問題は、CheckedListBox に表示されるものが気に入らないことです (FileInfo は Directory.GetFiles() からのものであるため、リストボックスにファイルの FileInfo.Name が表示されるだけです)。

別のカスタム クラス/オブジェクトを作成しなくても、CheckedListBox に表示される内容を変更する簡単な方法はありますか。

基本的にやってます

checkedListBox.Items.Add(fileInfo)

結果はファイルのファイル名だけです。

表示メンバーの変更は機能しますが、カスタムのものを作成することはできません。FileInfo クラスの既存のプロパティのみです。

Name - FullName のようなものを表示できるようにしたい

例 (望ましい): File1.txt - C:\Path\SubPath\File1.txt

4

2 に答える 2

4

実際、それは結局可能であるように思われます。CheckedListBoxにはプロパティFormattingEnabledFormat継承されたイベントがあり、ListBox各アイテムが表示される前に呼び出されます。したがって、これらの行に沿った何かが機能するはずです:

myCheckedListBox.FormattingEnabled = true;
myCheckedListBox.Format += (s, e) => { e.Value = string.Format("{0} - {1}", ((FileInfo)e.ListItem).Name, ((FileInfo)e.ListItem).FullName); };

しかし、それをテストしていません。MSDNも参照してください

古い答え:

ラッパーを作成しないとできないと思います。10行のコードは私にはそれほど悪くはありませんが:

class FileInfoView
{
    public FileInfo Info { get; private set; }

    public FileInfoView(FileInfo info)
    {
        Info = info;
    }

    public override string ToString()
    {
        // return whatever you want here
    }
}

ビュー モデルを持つことのもう 1 つの利点は、表示目的で好きなようにさらに装飾できることです。

于 2011-10-03T21:15:06.673 に答える
1

customクラスを作成してその中にインスタンスを含める以外に、これに回避策があるかどうかはわかりFileInfoません。このようにして、新しいものを作成しpropertyてカスタムデータを含めるかoverrideToString()関数に含めます

のようなもの(これはデモンストレーション目的のため)

 MyFileInfo
    {
        public FileInfo TheFileInfo;
        public string CustomProperty
        {
           get
           {
               if(this.TheFileInfo != null)
                    return this.TheFileInfo.FileName + this.TheFileInfo.FullName;
                return string.Empty;
           }
        }
    }
于 2011-10-03T21:06:57.200 に答える