我有一个TTntComboBox,我在显示模式对话框(组合框所属的)之前将itemindex设置为正值,但第一次,组合框显示一个空项目。
如果我关闭对话框并重新打开它,它会显示所需的项目。
在第一次显示对话框之前,itemindex不是-1,而组合框样式是csDropDownList。
编辑 - >
放入代码的关键代码段 在main函数中 - 表单初始化为
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));
}
ChildDialog的SetData(有问题的形式) - 有编辑框,组合框如下
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;
}
答案 0 :(得分:3)
在FormShow中 - 我将TranslateComponent称为
ChildDialog::FormShow() {
TranslateComponent(this);
}
正在重置Combobox的ItemIndex。
现在把它移到了ctor。