【问题标题】:Display the file name while preserving the path在保留路径的同时显示文件名
【发布时间】:2021-10-30 17:50:24
【问题描述】:

我需要帮助。我只想在 LisetView 中显示文件名,但是当我在 listView 中单击时,文件打开了。 但我需要文件的完整路径才能打开文件。 我该如何解决这个问题?

private void button1_Click(object sender, EventArgs e)
    {
        llistView1.Items.Clear();IEnumerable<string> filesOrDirectories = FileDirectorySearcher.Search(@"D:\", "*" + textBox1.Text + "*")
                                                                       .Select(d => Path.ChangeExtension(d, null));                                                                    

foreach(filesOrDirectories 中的字符串 fileOrDirectory){

DateTime dt = File.GetLastWriteTime(fileOrDirectory);
listView1.Items.Add(fileOrDirectory); 
ListViewItem lvi = new ListViewItem();
lvi.SubItems.Add(dt.ToString());
listView1.Items.Add(lvi);

}

private void listView1_ItemActivate(object sender, EventArgs e)
    {
        string currentDir = Directory.GetCurrentDirectory();
        string selectedFile = listView1.SelectedItems[0].Text; sloupci
        System.Diagnostics.Process.Start(Path.Combine(currentDir, selectedFile));

        

        

【问题讨论】:

  • 使用ListViewItem.Tag属性将完整路径存储在ListViewItem中(作为字符串),然后将.Tag转换为string以访问string selectedFile = (string) listView1.SelectedItems[0].Tag;中的完整路径跨度>
  • 我想这是 WinForms 吧?您应该将此标签添加到您的问题中,因为存在许多其他 UI 框架。
  • 看看GetFileNameWithoutExtension类:codeproject.com/Questions/387955/…
  • 谢谢马修·沃森。这正是我所需要的,它工作得很好,而且只有几行。

标签: c# file listview select path


【解决方案1】:

采用 .Tag 推荐,以下代码在 ListView 中显示文件名和最后写入,并显示如何获取 .Tag 详细信息。

请注意,这不遵循您当前的代码,但提供了足够的信息来显示信息并获取 MouseDoubleClick 事件中当前项目的信息,该事件可以替换为 ItemActivate 事件。

获取文件的代码

public static class Extensions
{
    public static IEnumerable<FileInfo> GetFilesByExtensions(this DirectoryInfo dir, params string[] extensions) 
        => dir.EnumerateFiles().Where((f) => extensions.Contains(f.Extension));

}

存储文件信息的容器

public class ItemDetails
{
    public string Directory { get; set; }
    public string FullName { get; set; }
    public string Name { get; set; }
    public DateTime LastWriteTime { get; set; }
    public string[] ItemArray => new[] {Name, LastWriteTime.ToString("MM/dd/yyyy")};
}

通过扩展名获取文件的代码

public class Operations
{
    public static List<ItemDetails> GetFiles(string path, params string[] extensions)
    {
        
        return new DirectoryInfo(path).GetFilesByExtensions(extensions).
            OrderBy(x => x.Name).
            Select(info => new ItemDetails()
            {
                Name = info.Name,
                Directory = info.DirectoryName, 
                FullName = info.FullName, 
                LastWriteTime = info.LastWriteTime
            }).
            ToList();
    }
}

表单代码

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        
        Shown += OnShown;
    }

    private void OnShown(object sender, EventArgs e)
    {
        var path = "Your directory name goes here";
        if (!Directory.Exists(path))
        {
            return;
        }
        
        var items = Operations.GetFiles(path,".docx",".chm");

        DirectoryListView.BeginUpdate();

        try
        {
            
            foreach (var itemDetail in items)
            {
                DirectoryListView.Items.Add(new ListViewItem(itemDetail.ItemArray) {Tag = itemDetail});
            }
            
            DirectoryListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
            DirectoryListView.FocusedItem = DirectoryListView.Items[0];
            DirectoryListView.Items[0].Selected = true;
            
            ActiveControl = DirectoryListView;
        }
        finally
        {
            DirectoryListView.EndUpdate();
        }
        
        DirectoryListView.MouseDoubleClick += ListView1OnMouseDoubleClick;
    }

    private void ListView1OnMouseDoubleClick(object sender, MouseEventArgs e)
    {
        var current = (ItemDetails) DirectoryListView.SelectedItems[0].Tag;
        MessageBox.Show($"{current.FullName}\n{current.Directory}");
    }
}

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 2012-03-10
    • 1970-01-01
    • 2012-03-18
    • 2018-01-18
    • 2016-06-21
    • 2012-03-16
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多