mono環境のC#でリストビューのクリア

コンピュータ

リストビューのクリアを試してみます。

// listview03.cs

// リストビューのクリア

using System;
using System.IO;
using System.Drawing;
using System.Windows.Forms;
/*
ビルド
mcs listview03.cs /r:System.Windows.Forms.dll /r:System.Drawing.dll
実行
mono listview03.exe
*/
class Form1 : Form
{
    // リストビューの生成
    public ListView FileListView = new ListView()
    {
        Dock = DockStyle.Fill,
        View = View.Details,   // 表示...詳細
    };
    // コンストラクタ
    public Form1()
    {
        this.Size = new Size(800, 600);

        // リストビューの親コントロールの設定
        FileListView.Parent = this;
        // リストビューにカラムを追加
        FileListView.Columns.AddRange(new ColumnHeader[]
        {
            // 名前、幅
            new ColumnHeader(){Text = "Name", Width = 480, }
        });

        // イベントの登録
        this.Load += Form1_Load;
        FileListView.ItemActivate += FileListView_ItemActivate;
    }
    // エントリーポイント
    public static void Main()
    {
        Application.Run(new Form1());
    }
    // カレントディレクトリの変更
    public void ChangeDirectory(string path)
    {
        Console.WriteLine("{0}", path);
        Directory.SetCurrentDirectory(path);

        // リストビューのクリア
        FileListView.Items.Clear();

        // 親ディレクトリの追加
        if (Path.GetPathRoot(path) != path)
        {
            DirectoryInfo parent = Directory.GetParent(path);
            string[] items = {"[..]"};
            ListViewItem lvi = new ListViewItem(items)
            {
                Tag = parent,
            };
            FileListView.Items.Add(lvi);
        }
        // ディレクトリの追加
        DirectoryInfo cdi = new DirectoryInfo(path);
        DirectoryInfo[] diArr = cdi.GetDirectories();
        foreach(DirectoryInfo di in diArr)
        {
            string[] items = {String.Format("[{0}]", di.Name)};
            ListViewItem lvi = new ListViewItem(items)
            {
                Tag = di,
            };
            FileListView.Items.Add(lvi);
        }
        // ファイルの追加
        FileInfo[] fiArr = cdi.GetFiles();
        foreach(FileInfo fi in fiArr)
        {
            string[] items = {String.Format("{0}", fi.Name)};
            ListViewItem lvi = new ListViewItem(items)
            {
                Tag = fi,
            };
            FileListView.Items.Add(lvi);
        }
    }
    // フォームのロードイベント
    public void Form1_Load(object s, EventArgs e)
    {
        string path = Directory.GetCurrentDirectory();
        ChangeDirectory(path);
    }
    // リストビューのダブルクリック
    public void FileListView_ItemActivate(object s, EventArgs e)
    {
        foreach(ListViewItem item in FileListView.SelectedItems)
        {
            // 選択した項目はディレクトリか?
            if (item.Tag is DirectoryInfo)
            {
                DirectoryInfo di = (DirectoryInfo)item.Tag;
                ChangeDirectory(di.FullName);
            }
        }
    }
}


ファイルの一覧からディレクトリをダブルクリックすると、そのディレクトリへ移動します。
移動する際リストビューの内容をListView.Items.Clear()でクリアしています。

コメント