TTntComboBox空白第一行
我有一个TTntComboBox,并且在显示模式对话框(组合框所属的模式对话框)之前将itemindex设置为正值,但是第一次,组合框显示空项目。TTntComboBox空白第一行
如果关闭对话框并重新打开它,它会显示所需的项目。
在第一次显示对话框并且组合框样式为csDropDownList之前,itemindex不是-1。
编辑 - >
在代码 键片断把在主函数 - 在WinMain中
父对话框有一个列表框和编辑形式初始化为
Application->CreateForm(__classid(TChildDialog), &ChildDialog);
,添加和删除按钮来编辑,添加,删除列表框的条目。当点击任何按钮时,条目的数据将以问题形式显示(我将称之为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;
的构造函数子对话框定义为
__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;
}
终于找到了答案。我正在使用gettext进行本地化。
在FormShow - 我打电话TranslateComponent为
ChildDialog::FormShow() {
TranslateComponent(this);
}
这是重新组合框的ItemIndex所。
现在把它移到ctor。
+1,即使在所有负面和接近的投票之后,都可以查找和发布答案。 – 2012-03-09 18:44:37
+1也是出于同样的原因。 – 2012-03-12 07:45:06
@dips,你可以标记自己的答案是正确的(点击勾号。)这可能会赚你一些徽章或其他:) – 2012-03-14 10:20:18
你如何显示表格?你是否每次都创建它的新实例,或者是否重复使用同一个实例?你什么时候设置项目索引? – 2012-03-07 18:26:36
我重复使用同一个实例。我将窗体显示为“if(Dialog-> ShowModal()== mrOk){}”。在显示对话框之前,我将项目索引设置为正值。 –
dips
2012-03-07 18:48:34
你的代码有一些设计缺陷,但由于我们无法访问它,所以我们不能告诉你它是什么。一种可能性是,您在*之前用项目填充列表框中的项目索引*。 – 2012-03-07 19:57:04