You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按创建时间排序目录数组,实现旧目录在ComboBox顶部显示?

调整Session目录在ComboBox中的显示顺序

当前C# WinForms项目中,GetSessionsFolders方法负责筛选包含非空Lightning子目录的Session目录并添加到comboBox1,构造函数创建新Session目录后也会直接添加到该组件。现需修改两处代码,让最早创建的旧目录显示在顶部,最新创建的目录显示在底部(按创建时间正序排列)。


修改1:调整GetSessionsFolders方法的排序逻辑

原方法未按创建时间排序,需先筛选符合条件的目录,再按创建时间升序排列后添加到ComboBox:

private void GetSessionsFolders()
{
    comboBox1.Items.Clear();

    string rootFolder = lightningsDirectoryTextBox.Text;
    string[] subDirectories = Directory.GetDirectories(rootFolder);

    // 筛选有效Session目录并附带创建时间
    var validSessions = subDirectories
        .Select(dir => new 
        {
            FullPath = dir,
            CreationTime = Directory.GetCreationTime(dir),
            SessionName = Path.GetFileName(dir).Substring(8) // 截取"Session_"后的名称
        })
        .Where(item => 
            Path.GetFileName(item.FullPath).StartsWith("Session_") &&
            Directory.GetDirectories(item.FullPath).Any(subDir => 
                subDir.Contains("Lightning") && Directory.GetFiles(subDir).Length > 0
            )
        )
        .OrderBy(item => item.CreationTime) // 按创建时间升序,最早的在前
        .ToList();

    // 批量添加排序后的目录名
    foreach (var session in validSessions)
    {
        comboBox1.Items.Add(session.SessionName);
        sessionDirectories.Add(session.FullPath); // 更新sessionDirectories集合
    }

    // 默认选中最新的目录(最后一项)
    if (comboBox1.Items.Count > 0)
    {
        comboBox1.SelectedIndex = comboBox1.Items.Count - 1;
    }
}

关键修改点:

  • 用Select封装目录的路径、创建时间和会话名称,便于后续排序
  • 新增OrderBy(item => item.CreationTime)实现按创建时间正序排列
  • 统一在排序完成后再添加到ComboBox,避免顺序混乱

修改2:调整构造函数的目录添加逻辑

原构造函数先添加目录名再创建目录,需调整顺序,并保持新目录添加到ComboBox末尾:

string folder = String.Format(@"Session_{0:dddd dd.MM.yyyy} At {0:HH.mm tt}", DateTime.Now);
string folderDateTime = Path.Combine(lightningsDirectoryTextBox.Text, folder);

// 先创建目录,再处理显示逻辑
Directory.CreateDirectory(folderDateTime);

// 提取会话名称
int index = folder.IndexOf("Session_");
string sessionFolder = folder.Substring(index + 8);

// 将新目录添加到ComboBox末尾,确保最新目录在底部
comboBox1.Items.Add(sessionFolder);

// 默认选中最新创建的目录
comboBox1.SelectedIndex = comboBox1.Items.Count - 1;

关键修改点:

  • 调整代码顺序,先创建目录再添加到ComboBox,逻辑更严谨
  • 保持Add方法将新目录置于ComboBox末尾,符合"旧目录在前、新目录在后"的需求

内容的提问来源于stack exchange,提问作者Daniel Lip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:02:15