| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > CComboBox теряет ItemData |
| Автор: 17dufa 7.8.2009, 17:58 | ||
| доброго времени суток. есть комбобокс, который заполняется в цикле:
в мапе есть элементы. внутри цикла все нормально. y != CB_ERR, при чтении y = list.GetItemData(i); возвращает то что надо. а вот yyyy уже равен 0. У меня уже моск взрывается, готов поверить в чудо. где и как CComboBox может прохерить записанные данные? как вдарить ему посильнее, чтоб он этого не делал? |
| Автор: Earnest 10.8.2009, 08:29 |
| Ну, во первых ты делаешь не совсем корректно. Совсем не факт, что AddString вставляет именно i-ю строку (например, если комбобокс сортированный). Т.е. нужно делать так: iPos = list.AddString(), а потом этот iPos использовать в SetItemData. Но проблема у тебя, похоже, не в этом. Ты весь код функции привел, буз купюр? Явно какая-то глупая ошибка, причем не здесь (здесь вроде все нормально, кроме вышеупомянутого момента). Не похоже, что комбобокс теряет даннные (с чего бы это). Больше похоже, что ты таки пишешь 0 в нулевой элемент в какой-то момент... |
| Автор: 17dufa 10.8.2009, 12:18 | ||||
Earnest, благодарю. заменил
на
и все починилось. Похоже он и правда отсортированный и каким-то элементам SetData выполнялся несколько раз, а каким-то соответственно ни разу. Повезло, что нулевой попал в эти ни разу, а то я бы эту ошибку никогда не заметил. |
| Автор: Earnest 10.8.2009, 12:35 | ||
Если тебе сортировака не нужна, ее можно отключить (в свойствах в редакторе ресурсов или просто стиль отшибить). В любом случае лучше пользоваться не InsertString, а AddString, но получать номер вставленной строки.
Этот код работает всегда, независимо от сортировки, а InsertString может испортить тебе сортировку в списке. |
| Автор: 17dufa 10.8.2009, 12:38 |
| Earnest, уговорила, черт языкастый |