У меня есть TTntComboBox, и я устанавливаю itemindex в положительное значение, прежде чем показывать модальное диалоговое окно (к которому принадлежит комбинированное поле), но в первый раз в поле со списком отображается пустой элемент.TTntComboBox blank first row
Если я закрою диалог и снова открою его, он отобразит нужный элемент.
Элементindex не первый, прежде чем показывать диалог в первый раз, а стиль combobox - csDropDownList.
Edit->
Ввод в ключевых фрагментов кода В основной функции - форма инициализируется как
Application->CreateForm(__classid(TChildDialog), &ChildDialog);
в WinMain
Диалог родитель имеет ListBox и редактировать, добавлять и delete для редактирования, добавления, удаления записей в списке. При нажатии любой из кнопок данные записи отображаются соответствующей формой (я назову ее 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 из ChildDialog (форма вопроса) - который имеет EditBox, выпадающий выглядит следующим образом
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;
}
Как вы показываете форму? Вы каждый раз создаете новый экземпляр, или вы повторно используете один и тот же экземпляр? Когда вы устанавливаете индекс позиции? –
Я использую тот же экземпляр. Я показываю форму как «if (Dialog-> ShowModal() == mrOk) {}". Перед отображением диалогового окна я установил индекс элемента в положительное значение. –
dips
У вас есть недостаток дизайна в вашем коде, но поскольку у нас нет доступа к нему, мы не можем сказать вам, что это такое. Одна из возможностей заключается в том, что вы устанавливаете индекс элемента * до *, который вы заполняете в списке с элементами. –