【问题标题】:C# - Storing multiple directories in settings and loading them into listboxC# - 在设置中存储多个目录并将它们加载到列表框中
【发布时间】:2010-12-06 20:27:45
【问题描述】:

我目前有一个带有列表框控件的 winform,它允许用户浏览目录并将它们添加到列表框。然后将使用应用程序设置文件(作为字符串?)保存这些目录位置,但我不确定应该如何分隔每个目录字符串。重新加载表单后,我希望将所有目录作为设置文件中的单个项目加载到列表框中。

所以我在技术上有两个问题:

  1. 在应用程序设置文件中保存多个位置的最有效方法是什么?

  2. 如何从设置中将目录加载到列表框中? (记住,有多个目录)

我的想法是将所有目录存储在一个字符串设置中并用逗号分隔它们,但我不确定是否有更有效的方法来做到这一点。

【问题讨论】:

    标签: c# winforms listbox


    【解决方案1】:

    不!!!!永远不要那样做!!!! 文件夹名称中可以包含逗号,如果您使用逗号作为分隔符,它可能会给您的程序带来许多关键问题。

    您可以在 Windows 的文件夹名称中使用非法字符。 \ / : * ? " < > |

    您也不能使用\ 和/,因为路径可能存储为c:\\data\\ 并使用'\' 作为分隔符是不好的,而且它们可能存储为c:/data/,因此使用/ 是有风险的。我认为使用* 或| 可能是一个好主意,因为它们都是非法的,并且它们不能位于文件夹路径的任何位置,并且连接了一些文件夹路径的字符串是可读的,并且可以通过查看* 轻松识别或| 作为分隔符。

        String[] paths = s.Split(new char[]{'*'}, StringSplitOptions.RemoveEmptyEntries);
        listBox1.Items.AddRange(paths);
    

    其中 s 是您从设置文件中读取的连接文件夹路径的字符串。 你也可以使用

            String[] paths = s.Split(new char[]{'*'}, StringSplitOptions.RemoveEmptyEntries);
            listBox1.DataSource = paths;
    

    【讨论】:

    • 我什至没有想到这一点,不敢相信我没有想到这一点。谢谢。
    【解决方案2】:

    你可以这样做,然后在逗号上做一个字符串。拆分,并将列表框的源设置为拆分的结果。

    string settings = GetFromConfig();
    var items = settings.Split(',');
    listBox1.DataSource = items;
    

    【讨论】:

      【解决方案3】:

      您可以在设置文件中使用StringCollection。

      一旦在集合中,您可以将它们放回List<String>,然后通过ListBox.Items 属性添加回项目,特别是Add 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-02
        • 2014-11-30
        • 1970-01-01
        • 1970-01-01
        • 2014-10-13
        • 2014-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多