CComboBox Сортировка

Поэтому я пытаюсь отрезать зубы CPP в существующем приложении.

Я наткнулся на небольшую загадку. Мои элементы списка добавляются в порядке, как вы можете видеть ниже. Тем не менее, выход

[1,10,11,12,13,14,15,2,3,4,5,6,7,8,9]

Я посмотрел на Документация CComboBox здесь. Тем не менее, я все еще не понимаю, почему это приводит к такому результату.

for (int i = 1; i <= m_pPage2->GetNumberColumns(); i++)
{
CString szColNum;
szColNum.Format (_T("%d"), i);
m_cSubColumn.AddString(szColNum);
}

1

Решение

Стандартные функции сравнения плохо работают со строками, содержащими числа. Они не принимают во внимание, что размер строки должен также вступить в игру. При этом, так как «10» начинается с «1», то он будет предшествовать чему-либо, что имеет больше, чем «1» в индексе 0.

Если бы вы заполняли все свое число начальными нулями, чтобы размеры строк были одинаковыми, он сортировал бы их в обычном числовом порядке.

Чтобы остановить CComboBox от сортировки его содержимого при использовании AddString() вам нужно установить CBS_SORT собственность на false

2

Другие решения

Проблема в том, что ваше поле со списком использует CBS_SORT стиль, таким образом, данные сортируются с использованием последовательности сортировки ASCII.

Чтобы отключить сортировку, необходимо удалить CBS_SORT стиль из поля со списком. В зависимости от того, какие инструментальные средства вы используете, этот стиль можно удалить, проверив какой-либо элемент в вашем инструменте, чтобы включить / выключить сортировку, или перейти прямо к самому файлу ресурса и просто удалить CBS_SORT стиль из определения поля со списком.

2

В окне «Свойства» для поля со списком убедитесь, что для параметра установлено значение «Ложь». Это позволит вашему комбинированному окну отображать данные так, как вы их вводите.

* Это то, что я делаю в Visual Studio, я не видел, где вы сказали, какую IDE вы использовали.

1