TTntComboBox空白第一行

时间:2012-03-07 18:22:18

标签: combobox modal-dialog c++builder

我有一个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;
   }

1 个答案:

答案 0 :(得分:3)

终于找到了答案。我使用gettext进行本地化。

在FormShow中 - 我将TranslateComponent称为

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

正在重置Combobox的ItemIndex。

现在把它移到了ctor。