У меня есть 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;
}