키보드 입력때 입력 Key에 맞는 Item을 자동으로 찾는것을 막는 근본적인(정상적인)방법은 잘모르겠구요
[자동선택 Disable꼼수]
일단 KeyPress에서 Key값을 0로 해주면 Item을 자동을 찾아 선택하지 않습니다.
그런데 님께서 원하시는것은 Key입력이 오면 Caption을 수정하려고 하는것이므로
Key입력이 들어올때 Item을 수정모드로 변환해주면 됩니다.
[키입력에 아이템 캡션 수정모드로 변환]
void __fastcall TForm1::ListView1KeyPress(TObject *Sender, char &Key)
{
ListView1->Selected->EditCaption();
}
그런데 위와같이 하면 수정중에 Key입력에도 계속 KeyPress이벤트가 뜨므로 수정중일때는
호출되면 안될것입니다.
수정중인지 아닌지 판별 방법은?
ListView의 OnEditing 과 OnEdited 이벤트를 이용하시면 됩니다.
bool bOnEditing=false;
void __fastcall TForm1::ListView1Edited(TObject *Sender, TListItem *Item,
AnsiString &S)
{
bOnEditing=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1Editing(TObject *Sender, TListItem *Item,
bool &AllowEdit)
{
bOnEditing=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1KeyPress(TObject *Sender, char &Key)
{
if ( ! bOnEditing && ListView1->Selected ) //아이템이 수정중이지 않으면..
ListView1->Selected->EditCaption();
}
그럼...
skjoon 님이 쓰신 글 :
: 리포트 타입으로 해서 리스트뷰를 사용하려고 합니다.
:
: 리스트뷰에 데이터가 있고
: 키보드 입력을 받아서 선택된 아이템의 내용을 수정하려고 하는데요.
:
: 문제는 숫자 키를 입력하게 되면.. 리스트뷰의 Item Caption의 내용이 숫자라서.. 입력된 숫자와 동일한 캡션값을 가진 아이템으로 Select가 바뀐다는 것입니다.
:
: 의도는 키보드로 숫자를 입력하면 선택된 아이템의 해당 컬럼 위치에 에디트박스가 활성화되고 그 에디트박스의 텍스트에 입력된 숫자가 들어가고, 마우스 등으로 다른 아이템을 선택하면 에디트박스를 없애려고 합니다.
:
: 그런데.. 숫자 키 입력을 하면 순식간에 에디트박스 활성화 -> 다른 아이템 선택 -> 에디트박스 사라짐 -> 입력된 키 값에 해당하는 캡션을 가진 아이템이 셀렉트 되어있음..
:
: 이렇게 되네요.. 설명이 제대로인지... ^^;;;;
:
: 암튼 질문의 요지는 리스트뷰에서 키 입력에 따라 지 스스로 아이템을 선택해버리는 기능을 막고 싶다는 것입니다.
:
: 쉽게 KeyDown 이벤트에서 Key를 NULL 로 만들어봤는데 안되네요.. ^^;;
:
: 그럼 부탁 드리겠습니다.....