1

以下の私のコードは、コントロールによって選択されたフォルダーのリストビューを表示しますfolderBrowser。フォルダとファイルをリストビューで表示した後、クリックしたファイルを開きたい。を使用して次のコードを記述しLISTVIEW_itemactivationました。問題は、選択したファイルを開くことができないことです。私は何が間違っているのですか?

private void PopulateListView()
{
    listView1.Clear();
    //headers listview

    listView1.Columns.Add("File Name", 150);
    listView1.Columns.Add("Last Accessed", 110);
    listView1.Columns.Add("Size", 100);
    //listView1.ItemActivate += new System.EventHandler(listView1_ItemActivate);


    if (folderBrowser.ShowDialog() == DialogResult.OK)
    {

        string[] files = Directory.GetFiles(folderBrowser.SelectedPath);
        string[] folders = Directory.GetDirectories(folderBrowser.SelectedPath);
        foreach (string file in files)
        {
            long folderSize = 0;
            string fileName = Path.GetFileNameWithoutExtension(file);

            FileInfo finfo = new FileInfo(file);
            folderSize += finfo.Length;

            ListViewItem item = new ListViewItem(new[] { fileName, File.GetLastAccessTime(file).ToString(), finfo.Length.ToString() });

            images();
            item.ImageIndex = 1;
            listView1.Items.Add(item);

        }

        foreach (string file in folders)
        {
            string fileName = Path.GetFileNameWithoutExtension(file);
            ListViewItem item = new ListViewItem(new[] { fileName, File.GetLastAccessTime(file).ToString(), file.Length.ToString() });
            images();
            item.ImageIndex = 0;
            listView1.Items.Add(item);
        }
    }
}
private void button1_Click(object sender, EventArgs e)
{
    PopulateListView();
    textBox1.Text = folderBrowser.SelectedPath;
}
private void images(){
    try
    {
        imageList1.Images.Add(Bitmap.FromFile("./images/file.gif"));
        imageList1.Images.Add(Bitmap.FromFile("./images/Folder.gif"));
    }
    catch (FileNotFoundException) { }

}


private void listView1_DoubleClick(object sender, EventArgs e)
{

        ListViewItem item_clicked = listView1.SelectedItems[0];

}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    listView1.View = View.LargeIcon;
}

private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
    listView1.View = View.SmallIcon;
}

private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
    listView1.View = View.Details;
}

private void radioButton4_CheckedChanged(object sender, EventArgs e)
{
    listView1.View = View.List;
}

private void radioButton5_CheckedChanged(object sender, EventArgs e)
{
    listView1.View = View.Tile;
}

private void listView1_ItemActivate(object sender, EventArgs e)
{

        try
        {
    string sPath = listView1.SelectedItems.ToString();
    string sFileName = listView1.FocusedItem.Text;

    Process.Start(sPath + "\\" + sFileName);
}
catch(Exception Exc)    {   MessageBox.Show(Exc.ToString());    }    
}
4

1 に答える 1

0

リストへの入力方法に基づいて、この変更されたコードは機能するはずです。

private void listView1_ItemActivate(object sender, EventArgs e)
{
    try
    {
        string sPath = listView1.SelectedItem.SubItems[0].Text;
        Process.Start(sPath);
    }
    catch(Exception Exc)
    {
        MessageBox.Show(Exc.ToString());
    }
}

ただし、拡張子がわからないとファイルをロードできないため、この行を削除する必要もあります。

string fileName = Path.GetFileNameWithoutExtension(file);

ほら、あなたが同じようにロードするとき、それはその配列でListViewItemすべてをロードしているのです。SubItemsさらに、によってDirectory.GetFiles(folderBrowser.SelectedPath);返される配列は、ファイルへのフルパスを持つファイルの配列を返すため、最初SubItemのファイルを選択すると、そのファイルへのフルパスになり、そのファイルパスで発行Process.Startすると、シェルがデフォルトのプログラムのファイル。

于 2013-01-04T12:02:46.993 に答える