|
아래 소스에서.. ALL_ITEM은.. 전체 목록에 들어갈 것을 뜻하는것이구요.. 조건에 따라 보이는 아이템을 틀리게 하시는 부분은.. 아랫 부분입니다..
: : // 비교를 하여 입력된 글자와 맞는 것만 추려냄
: : itIndex = ComboBox1->Items->Count - 1;
: : while(itIndex >= 0) {
: : if(ComboBox1->Items->Strings[itIndex].SubString(1, ComboBox1->Text.Length()) != ComboBox1->Text)
: : ComboBox1->Items->Delete(itIndex);
: :
: : itIndex --;
: : }
빌더의 Code Insight (용주님이 말씀하신 기능의 이름입니다) 기능은.. 위의 비교문의 내용이 더 심오하고.. 더 길겠죠...
만약, ALL_LIST 에서 처리해야할 것이 많다면, 특정한 여러 데이터를 동적으로 불러들이는 작업도 괜찮을듯 싶습니다. 소스 코드도 비슷한 기능이니.. 기회가 되신다면.. 아까 올려드린 소스코드도 실행해 보시는것두 괜찮으실것 같네요.
이용주 님이 쓰신 글 :
: 유영인 [Chris] 님이 쓰신 글 :
: : 가장 좋은 방법은, ListBox 같은 것을 동적생성하여 그때마다 보여주는 것입니다. ComboBox가 Edit와 ListBox의 결합된 것으로 목적에 가장 잘 맞게 보이지만, ComboBox가 가지는 특성이나 기타 VCL이 공통적으로 가지는 특성으로 인해서 목적을 달성하시기에 불편한점이 없지 않습니다.
: :
: : 일단, List를 그때그때마다 갱신을 시켜야 하는데, 리스트를 갱신시킬때마다 ComboBox의 내용은 사라집니다. 그래서 아래의 소스를 사용하시면 일시적으로 커서가 깜빡이는 현상이 발생합니다. 또한, OnClick 이벤트는 리스트에서 아이템이 선택되었을때 발생하는데, 이때 클릭을 하게되면 0번 아이템만 남고 나머지는 전부 소멸됩니다. 그래서 타이밍이 틀리면 원하는 아이템을 뽑아올 수가 없는거죠.
: :
: : 아래는 ComboBox 만을 사용한 간단한 예제입니다.
: :
: :
: : //---------------------------------------------------------------------------
: :
: : #include <vcl.h>
: : #pragma hdrstop
: :
: : #include "Unit1.h"
: :
: : //---------------------------------------------------------------------------
: :
: : #pragma package(smart_init)
: : #pragma resource "*.dfm"
: : TForm1 *Form1;
: : TStringList *ALL_ITEM;
: : bool SELECTED_VALUE = false;
: :
: : //---------------------------------------------------------------------------
: : __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
: : {
: :
: : int itCount;
: :
: :
: : ALL_ITEM = new TStringList;
: :
: : // 전체 아이템 가상 생성
: : for(itCount = 0; itCount < 1000; itCount ++)
: : ALL_ITEM->Add(random(10000));
: :
: :
: : // 생성된 아이템을 리스트에 넣음
: : ComboBox1Change(ComboBox1);
: :
: : }
: :
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::FormDestroy(TObject *Sender)
: : {
: :
: : delete ALL_ITEM;
: :
: : }
: :
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::ComboBox1Change(TObject *Sender)
: : {
: :
: : int itItemIndex = ComboBox1->ItemIndex,
: : itSelStart = ComboBox1->SelStart,
: : itIndex;
: :
: :
: : // 우선 전체 아이템을 넣고...
: : ComboBox1->Items->Assign(ALL_ITEM);
: :
: :
: : // 비교를 하여 입력된 글자와 맞는 것만 추려냄
: : itIndex = ComboBox1->Items->Count - 1;
: : while(itIndex >= 0) {
: : if(ComboBox1->Items->Strings[itIndex].SubString(1, ComboBox1->Text.Length()) != ComboBox1->Text)
: : ComboBox1->Items->Delete(itIndex);
: :
: : itIndex --;
: : }
: :
: :
: : // OnClick에서 값이 추출되었으면 그 값으로 설정
: : // 이 루틴이 있어야 하는 이유는 Assign에서 모든 선택 정보가 사라지기 때문..
: : if(SELECTED_VALUE) {
: : ComboBox1->ItemIndex = 0;
: : SELECTED_VALUE = false;
: : }
: :
: :
: : // 커서의 위치를 원래의 위치로 복구. 이것 역시.. Assign 때문에..
: : ComboBox1->SelStart = itSelStart;
: :
: : }
: : //---------------------------------------------------------------------------
: : void __fastcall TForm1::ComboBox1Click(TObject *Sender)
: : {
: :
: : SELECTED_VALUE = true;
: :
: : }
: : //---------------------------------------------------------------------------
: :
: :
: : 답변감사드립니다.
: 제가 답장이 늦었군요.^^;;
: 근데 제가 궁금한것은 ComboBox에 추가를 시켜서 선택하는것이 아니구요. 예를들어 빌더에서 ComboBox1-> 이렇게 치고 가만있으면 뒤에 어떤것이 추가 될수 있는지 항목이 나오잖아요? 그런걸 어떻게하는건지 궁금해서요. 특별하게 다른파일로 아이템을 추가해서 그것을 바로 찾아야 하는건가요?? 어떻든 제가 궁금한것은 이거네요^^ 지금 이것도 열심히 해보는중이에요.. 감사드립니다.
|