2012-03-07 14 views
0

私はTTntComboBoxがあると私は(コンボボックスが属する)モーダルダイアログを表示する前に正の値にitemindexを設定していたが、最初の時間は、コンボボックスが空の項目を示しています。TTntComboBox空白最初の行

ダイアログを閉じてもう一度開くと、目的の項目が表示されます。

最初にダイアログを表示する前にitemindexが-1でなく、コンボボックススタイルがcsDropDownListです。

メイン関数内のコード のキースニペットに置く

編集 - >

- WinMain関数

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

として初期化フォーム親ダイアログがリストボックスや編集を持ち、追加してリストボックスのエントリを編集、追加、削除するには、「削除」ボタンをクリックします。いずれかのボタンがクリックされると、エントリのデータが問題のフォームで表示されます(私はChildDialogと呼ぶでしょう) 。

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のを次のようにコンボボックスがあるエディットボックスを持っている、 - 次のように編集ボタンに関連付けられたアクションが(親フォーム)である

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メソッド(問題の形式)子ダイアログは、

__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

私は同じインスタンスを再利用します。私はフォームを "if(Dialog-> ShowModal()== mrOk){}"と表示します。ダイアログを表示する直前に、アイテムインデックスを正の値に設定しました。 – dips

+0

あなたのコードには設計上の欠陥がありますが、アクセス権がないため、それが何であるかはわかりません。 1つの可能性は、リストボックスに項目を設定する前にアイテムインデックス*を設定することです。 –

答えて

3

と定義されています。私はローカライゼーションのためにgettextを使用しています。 FormShowで

- 私は

コンボボックスのItemIndexをリセットした
ChildDialog::FormShow() { 
    TranslateComponent(this); 
} 

としてTranslateComponentを呼んでいました。

これをctorに移動しました。

+1

+1すべての否定およびクローズ票の後でも答えを見つけて投稿してください。同じ理由で+1は –

+1

+1です。 –

+0

@dipsの場合、自分の回答を正しいとマークすることができます(チェックマークをクリックしてください)。これはおそらくあなたにバッジやその他のものをもらうでしょう:) –

関連する問題