我有一個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;
}
你如何顯示錶格?你是否每次都創建它的新實例,或者是否重複使用同一個實例?你什麼時候設置項目索引? – 2012-03-07 18:26:36
我重複使用同一個實例。我將窗體顯示爲「if(Dialog-> ShowModal()== mrOk){}」。在顯示對話框之前,我將項目索引設置爲正值。 –
dips
2012-03-07 18:48:34
你的代碼有一些設計缺陷,但由於我們無法訪問它,所以我們不能告訴你它是什麼。一種可能性是,您在*之前用項目填充列表框中的項目索引*。 – 2012-03-07 19:57:04