예를들어, 폼상에 Edit1.text, Edit2.text, Edit3.text......가 20여개 있고요,
각각의 Edit.text에 코드번호를 입력하고 빠져나올때 ListBox상에 코드에 해당하는 품목이 나열되고 이를선택하고 ListBox를 없앤 후,메인폼의 다음 Edit.text로 Focus를 이동하는 기능이 필요합니다. 어떻게 구현하나요?
[요약] 폼상의 Edit항목에서 Exit 할 때 ListBox를 참조하고 포커스를 제자리 혹은 그 다음항목으로 돌리는 방법!
아래는 제가 하다가 막힌 코드소스입니다.
procedure TFrmDtMg.ListBox1DblClick(Sender: TObject);//리스트박스에서 더블클릭!
var i:integer;
begin
for i:=0 to ComponentCount-1 do begin
if Components[i].name=vComponent then
//vComponent는 앞서 "TEdit(Sender).name"를 저장한 스트링변수임!
TEdit(Components[i]).text:=Trim(Copy(ListBox1.Items ListBox1 ItemIndex],3,2))
// 리스트박스에서 선택한 값을 메인폼의 TEdit컴포넌트에돌린다
ListBox1.Visible:=False;
// 리스트박스를 없애고
(??)TEdit(Components[i+1]).SetFocus;
// 포커스를 다음 컴포넌트에 맞춘다(오류발생!)
맨마지막줄(??)이 문제가 되는 것 같은데, 올바른 방법을 알려주시면 고맙겠습니다.
Shift: TShiftState);
begin
if LENGTH(edt_idno_1_p1.Text) = 6 then
SelectNext((Sender as TWincontrol), True ,True ) ;
end;
'SelectNext' 이 구문앞에 두고 F1 키를 눌러보세요..
그리고 컴포넌트의 OnExit이벤트에 무언가를 코딩하는 것은
원하지 않는 결과가 나오기 쉽지 않을까 싶습니다.
포커스를 잃었을 때 어떤일을 해라보다는 다른 방법을 찾으
시는 것이 좋을 듯합니다.