[prg] Сортировка в ListBox
Здравствуйте. Язык программирования C#. В папке есть 25 файлов со
следующей нумерацией: 01,02,03,04...025. Мне нужно вывести их в ListBox,
но чтобы они отображались в обычной возрастающей последоватеьности. Вот так:
01
02
03
04
05
...
025
Запрашиваю эти файлы следующим способом:
DirectoryInfo df = new DirectoryInfo("Files\\");
StringBuilder fileList = new StringBuilder();
foreach (FileInfo fi in df.GetFiles("*.wav"))
{
listBox1.Items.Add(fi.Name);
}
Но в ListBox они добавляются не по порядку, а так:
01
010
011
012
...
02
021
022
Подскажите, пожалуйста, как это поправить?
Приветствую всех.
По умолчанию элементы ListBox сортируются в алфавитном порядке, то есть
сравниваются посимвольно. Именно так они у вас и отсортированы. Для
алфавитного порядка строка
"011меньше, чем строка "02", потому что первые символы у них совпадают, а
код символа "1" меньше, чем код символа "2"; на этом сравнение
заканчивается.
Вам нужно реализовать свой алгоритм сортировки, например, преобразовать
имена файлов (без расширения) в числа и сравнивать эти числа.
Чтобы изменить правило сортировки, нужно реализовать свой класс, унаследовав
его от класса ListBox и переопределить метод Sort(), в котором и осуществить
нужный вам вариант сортировки.
См. документацию по методу ListBox.Sort -- там есть пример подобного
переопределения.
https://msdn.microsoft.com/ru-ru/library/system.windows.forms.listbox.sort%28v=vs.110%29.aspx
Другой вариант -- это отменить автоматическую сортировку в ListBox,
установив свойство Sorted равным false.
А перед добавлением элементов в список, отсортировать массив, возвращаемый
GetFiles() в нужном вам порядке.
См. документацию по методу Array.Sort (Array, IComparer)
https://msdn.microsoft.com/ru-ru/library/aw9s5t8f%28v=vs.110%29.aspx