2012-03-07 5 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

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

답변

3

마지막으로 답을 찾았습니다. 나는 현지화를 위해 gettext를 사용하고 있습니다.

FormShow에서

- 나는 TranslateComponent를 호출했다 콤보 상자의 itemIndex라는 재설정 된

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

있다.

이제 ctor로 이동했습니다.

+1

+1 –

+1

+1 같은 이유로. –

+0

@dips라면 자신의 답변을 올바른 것으로 표시 할 수 있습니다 (체크 표시를 클릭하십시오). 그러면 아마도 배지 나 다른 사람도 얻을 수 있습니다 :) –

관련 문제