TTntComboBox空白第一行

TTntComboBox空白第一行,combobox,modal-dialog,c++builder,Combobox,Modal Dialog,C++builder,我有一个TTntComboBox,在显示模式对话框(组合框所属)之前,我将itemindex设置为正值,但是第一次,组合框显示了一个空项 如果我关闭对话框并重新打开它,它将显示所需的项目 在第一次显示对话框之前,itemindex不是-1,并且组合框样式是csDropDownList 编辑-> 输入关键代码片段 在主函数中-初始化为 Application->CreateForm(__classid(TChildDialog), &ChildDialog); 在温曼 父

我有一个TTntComboBox,在显示模式对话框(组合框所属)之前,我将itemindex设置为正值,但是第一次,组合框显示了一个空项

如果我关闭对话框并重新打开它,它将显示所需的项目

在第一次显示对话框之前,itemindex不是-1,并且组合框样式是csDropDownList

编辑->

输入关键代码片段 在主函数中-初始化为

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

父对话框有一个列表框和编辑、添加和删除按钮,用于编辑、添加和删除列表框的条目。单击任何一个按钮时,条目的数据都会显示在相关表单中(我称之为ChildDialog) . 与编辑按钮关联的操作如下(父窗体)

还有ChildDialog(有问题的表单)的SetData,它有editbox和combobox,如下所示

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;
void\uu快速调用TChildDialog::SetData(TData*Data)
对于(int i=0;i字符串,数据)){
组合框->项目索引=i;
打破
}
}
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;
   }
\uuu快速调用ChildDialog::ChildDialog(TComponent*所有者)
:t表格(所有者)
{
组合框->项目->清除();
对于(int i=0;i项目->添加(someDataStruct(i)->Sring);
}
组合框->项目索引=0;
}

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

在FormShow中,我将TranslateComponent称为

 ChildDialog::FormShow() {
    TranslateComponent(this);
 }
正在重置Combobox的ItemIndex


现在移动到ctor。

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

在FormShow中,我将TranslateComponent称为

 ChildDialog::FormShow() {
    TranslateComponent(this);
 }
正在重置Combobox的ItemIndex


现在将其移动到ctor。

如何显示表单?您是每次都创建它的新实例,还是重复使用同一个实例?什么时候设置项目索引?我重用同一个实例。我将表单显示为“if(Dialog->showmodel()==mrOk){}”。在显示对话框之前,我将项目索引设置为正值。您所描述的内容没有本质上的错误,因此我将假设您未描述的部分代码存在错误。这可能是很多事情,但如果您发布一些源代码,您可能会很快得到答案。作为替代,我将猜测您正在创建对话框窗体的两个(或更多)实例。您在其中设置ItemIndex的与您显示的不同。您的代码中存在一些设计缺陷,但由于我们无法访问它,因此无法告诉您它是什么。一种可能性是,在用项目填充列表框之前设置项目索引。这是商业守则。在我对i18n进行更改之前,代码运行良好,我对editbox、combobox和表单上的其他静态数据使用了WideString而不是AnsiString。关于如何获取一些底层数据结构,还有一些更改,但对UI元素没有任何更改show是否显示表单?您是每次都创建它的新实例,还是重复使用同一个实例?什么时候设置项目索引?我重用同一个实例。我将表单显示为“if(Dialog->showmodel()==mrOk){}”。在显示对话框之前,我将项目索引设置为正值。您所描述的内容没有本质上的错误,因此我将假设您未描述的部分代码存在错误。这可能是很多事情,但如果您发布一些源代码,您可能会很快得到答案。作为替代,我将猜测您正在创建对话框窗体的两个(或更多)实例。您在其中设置ItemIndex的与您显示的不同。您的代码中存在一些设计缺陷,但由于我们无法访问它,因此无法告诉您它是什么。一种可能性是,在用项目填充列表框之前设置项目索引。这是商业守则。在我对i18n进行更改之前,代码运行良好,我对editbox、combobox和表单上的其他静态数据使用了WideString而不是AnsiString。关于如何获取一些底层数据结构,还有一些更改,但是,即使在所有的反对票和接近票之后,在这里查找和发布答案的UI元素+1也没有改变。@dips,您可以将自己的答案标记为正确(单击复选标记)。这可能也会为您赢得一些徽章或其他:)+1即使在所有的反对票和接近票之后在这里查找和发布答案。@dips,您可以将自己的答案标记为正确(单击复选标记)。这可能会为您赢得一些徽章或其他:)