Отправляет email-рассылки с помощью сервиса Sendsay

[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

Подскажите, пожалуйста, как это поправить?

Ответить   Юлия Го Sun, 27 May 2018 05:01:15 +0300 (#3565200)

 

Ответы:

Приветствую всех.
По умолчанию элементы 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

Ответить   "i_chay" Sun, 27 May 2018 11:59:47 +0300 (#3565217)