2016-01-18 c++ builder > TComboBox > Items[]変更時にItemIndexが変更されるのを回避する実装


動作確認
C++ Builder XE4

TComboBoxにてItems[]を変更時、ItemIndexが-1に初期化されてしまう。
それを回避するため、以下のような関数を用意している。

void TItemsUpdator::setStringToTComboBoxItems(String str, TComboBox *cbPtr, bool withSpace)
{
    if (cbPtr == NULL) {
        return;
    }

    TStringList *slPtr = static_cast<TStringList *>( cbPtr->Items );

    int preIdx = cbPtr->ItemIndex;

    if (withSpace) {
        slPtr->StrictDelimiter = true;
        slPtr->Delimiter = L',';
        slPtr->DelimitedText = str;
    } else {
        slPtr->CommaText = str;
    }

    // Items[]変更時にItemIndexが-1に初期化されるので元々の値に戻す
    cbPtr->ItemIndex = preIdx;  
}

もっとシンプルな方法で同じことができないだろうか。