Вместо того, чтобы связывать объекты с элементами поля со списком, я ассоциирую long
идентификаторы , представляющие варианты. Они поступают из базы данных, поэтому в любом случае это кажется естественным. Теперь я сохраняю id
, а не index
выбора пользователя, так что выбор запоминается между сеансами. Если идентификатор больше не существует в базе данных - ничего страшного. Выбор будет испорчен один раз. Однако, если БД не изменится, это будет большой успех;)
Вот как я могу получить идентификатор:
chosenSomethingIndex = cmbSomething.GetCurSel();
lastSomethingId = cmbSomething.GetItemData(chosenSomethingIndex);
Как мне изменить это? Когда я загружаю сохраненное значение для последнего выбора пользователя, мне нужно преобразовать этот идентификатор в индекс. Я могу сделать:
cmbSomething.SetCurSel(chosenSomethingIndex);
Однако как я могу попытаться (он может не существовать) получить индекс, если у меня есть идентификатор?
Я ищу ответную функцию для GetItemData
Я использую VS2008, возможно, последнюю версию MFC, что бы это ни было.
Спасибо.
EDIT:
Ах, дерьмо. Похоже, мне нужно сделать это:
for (int i = 0; i < nCount; i++)
{
if (nId == GetItemData(i))
{
SetCurSel(i);
hr = S_OK;
break;
}
}