私は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;
}
フォームをどのように表示しますか?毎回新しいインスタンスを作成するか、同じインスタンスを再利用しますか?アイテムインデックスはいつ設定しますか? –
私は同じインスタンスを再利用します。私はフォームを "if(Dialog-> ShowModal()== mrOk){}"と表示します。ダイアログを表示する直前に、アイテムインデックスを正の値に設定しました。 –
dips
あなたのコードには設計上の欠陥がありますが、アクセス権がないため、それが何であるかはわかりません。 1つの可能性は、リストボックスに項目を設定する前にアイテムインデックス*を設定することです。 –