2012-03-07 67 views
0

我有一個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; 
    } 
+1

你如何顯示錶格?你是否每次都創建它的新實例,或者是否重複使用同一個實例?你什麼時候設置項目索引? – 2012-03-07 18:26:36

+0

我重複使用同一個實例。我將窗體顯示爲「if(Dialog-> ShowModal()== mrOk){}」。在顯示對話框之前,我將項目索引設置爲正值。 – dips 2012-03-07 18:48:34

+0

你的代碼有一些設計缺陷,但由於我們無法訪問它,所以我們不能告訴你它是什麼。一種可能性是,您在*之前用項目填充列表框中的項目索引*。 – 2012-03-07 19:57:04

回答

3

終於找到了答案。我正在使用gettext進行本地化。

在FormShow - 我打電話TranslateComponent爲

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

這是重新組合框的ItemIndex所。

現在把它移到ctor。

+1

+1,即使在所有負面和接近的投票之後,都可以查找和發佈答案。 – 2012-03-09 18:44:37

+1

+1也是出於同樣的原因。 – 2012-03-12 07:45:06

+0

@dips,你可以標記自己的答案是正確的(點擊勾號。)這可能會賺你一些徽章或其他:) – 2012-03-14 10:20:18