CStringList в MFC - PullRequest
       15

CStringList в MFC

0 голосов
/ 18 декабря 2008

Я кодировал с 2 объектами CStringList. У каждого есть свои данные, например, у одного есть имя, а у другого - фонено, и оба синхронизируются, то есть, если есть фонено, есть имя и наоборот.

Теперь у меня есть 2 комбинированных списка, в которых я показываю имена и соответствующие фонены. Название combobox отсортировано, следовательно, синхронизация между ними идет на бросок. следовательно, для сортировки я сделал следующее:


int aComboElementNo = myNameComboBox.GetCount();
if( aComboElementNo >= 1 )
{
    for( int aIndex = 0; aIndex < aComboElementNo; aIndex++ )
    {
        CString aTempStr;
        // Getting the string in the combobox
        myNameComboBox.GetLBText( aIndex, aTempStr );
        // Getting the position where the name is present in the list
        POSITION aPos = aNameList.Find( aTempStr );
       // setting the appropriate phoneno in the 2nd combobox
        myPhoneComboBox.AddString( aPhoneList.GetAt( aPos ) );
    }
}

Когда я выполнил это, я получил имена в myPhoneComboBox, а не фонены.

Теперь у меня есть 2 qns:

  1. почему я получаю имя, присутствующее в списке имен, когда я получаю доступ к фонелисту? Разве это не нарушение, так как я могу получить доступ к некоторым другим данным переменных, используя другую переменную.

  2. как отсортировать второй список.

Ответы [ 3 ]

1 голос
/ 18 декабря 2008

Надеюсь, вы используете CStringArray, а не CStringList. Вам нужно использовать FindIndex, а не Find, так как Find будет возвращать OBJECT Pos, а не Index index .... и чтобы получить элемент с массивом используйте просто [] оператор. Если вы все еще хотите использовать CStringList, то с помощью Iterator найдите счетчик индексов первого совпадения строки в одном списке и используйте FindIndex этого IndexCount, чтобы получить объект размещения для второго списка, чтобы использовать GetAt для второго списка.

0 голосов
/ 28 декабря 2008

Это глупый, простите, глупый способ найти имена. Предполагается, что имена являются уникальными. Боже, помоги мне, мне приходилось иметь дело с этими вещами, поля имен никогда не должны рассматриваться как уникальные, это чертовски опасно. Просто спросите моего отца Baash05 Sr.

Я бы предположил, что есть идентификатор или некоторый набор данных, когда приложение добавляет в поле со списком. Пожалуйста, используйте это на своей карте. Я предполагаю, что программист установил для данных либо идентификатор имени, либо указатель на объект, который содержал имя. (объект персона / бизнес-объект / объект студента ...).

Если код, который добавляет имена, не добавляет способа объяснить разницу между Джорджем Форманом и кем-либо из его детей, тогда аргументируйте боссу, что его реализация должна быть изменена, потому что богом это должно быть !

int aComboElementNo = myNameComboBox.GetCount();
for( int aIndex = 0; aIndex < aComboElementNo; aIndex++ )
{
    int nameLocal = myNameComboBox.GetItemData( aIndex);
    myPhoneComboBox.InsertString(aIndex, aPhoneList[namelocal] );
}
0 голосов
/ 19 декабря 2008

Почему у вас есть 2 отдельных списка? Почему бы не один CTypedPtrArray структур, содержащих как имя, так и телефон nb?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...