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
코드에 디자인 결함이 있지만 액세스 권한이 없으므로 그 코드가 무엇인지 말할 수는 없습니다. 한 가지 가능성은 목록 상자에 항목을 채우기 전에 항목 색인 *을 설정한다는 것입니다. –