TTntComboBox пустая первая строка - PullRequest
0 голосов
/ 07 марта 2012

У меня есть TTntComboBox, и я устанавливаю itemindex в положительное значение, прежде чем показывать модальное диалоговое окно (к которому относится поле со списком), но в первый раз поле со списком показывает пустой элемент.

Если я закрою диалоговое окно и снова открою его, он покажет нужный элемент.

Итеминдекс не равен -1, прежде чем впервые отобразить диалоговое окно, а стиль комбинированного списка - csDropDownList.

Edit ->

Ввод ключевых фрагментов кода В основной функции - форма инициализируется как

     Application->CreateForm(__classid(TChildDialog), &ChildDialog);

в WinMain

Родительский диалог имеет список и редактирование,Кнопка «Добавить и удалить» для редактирования, добавления, удаления записей списка.При нажатии любой кнопки данные записи показываются в соответствующей форме (я назову ее ChildDialog).Действие, связанное с кнопкой редактирования, выглядит следующим образом (родительская форма)

if (ListBox->ItemIndex >= 0) {
   TTntListItem *Item = ListBox->Items->Item[ListBox->ItemIndex];
   ChildDialog->SetData(Item->Data);
   if (ChildDialog->ShowModal() == mrOk) {
      delete Item->Data;
      TData *NewData = ChildDialog->GenerateData();
      PopulateData(Item, NewData);
   }
}


void __fastcall ParentForm::PopulateData(TTntListItem *Item, TData *Data) {
   Item->Data = Data;
   Item->SubItems->Clear();
   Item->SubItems->Add(functionUsingSomeDatastruct(Data));
}

И SetData of ChildDialog (рассматриваемая форма), который имеет поле редактирования, выпадающий список выглядит следующим образом

void __fastcall TChildDialog::SetData(TData *Data)
 for (int i = 0; i < someDataStructLength(); i++) {
    if (!strcmp(someDataStruct(i)->String, Data))      {
     combobox->ItemIndex = i;
     break;
   }
}
EditBox->Text = SomeData.String2;

Ctor дочернего диалога определяется как

 __fastcall ChildDialog::ChildDialog(TComponent* Owner)
    : TForm(Owner)
  {
    combobox->Items->Clear();
    for (int i = 0; i < datacount(); i++) {
      combobox->Items->Add(someDataStruct(i)->Sring);
    }
    combobox->ItemIndex = 0;
   }

1 Ответ

3 голосов
/ 09 марта 2012

Наконец-то нашел ответ.Я использую gettext для локализации.

В FormShow - я вызывал TranslateComponent как

 ChildDialog::FormShow() {
    TranslateComponent(this);
 }

, который сбрасывал ItemIndex Combobox.

Теперь переместил его в ctor.

...