안녕 하세요?
BacTeria 박종민입니다.
결론부터 말씀 드리면... (최선의 답은 아닙니다. 제가 워낙 단순무식 그 자체라...)
SelectNext(Sender as tWinControl, True, True);
위의 Sender에 강제로 값을 대입시키는 겁니다.
예를 들어 에디트 박스가 아래와 같이 있다고 가정하면,
┌───┐ ┌───┐ ┌───┐
│ 1 │ │ 2 │ │ 3 │
└───┘ └───┘ └───┘
┌───┐ ┌───┐ ┌───┐
│ 4 │ │ 5 │ │ 6 │
└───┘ └───┘ └───┘
┌───┐ ┌───┐ ┌───┐
│ 7 │ │ 8 │ │ 9 │
└───┘ └───┘ └───┘
5번의 에디트 박스에서 키 UP 이벤트가 발생되어 2번으로 옮기려면
아래와 같이 하면 되겠죠. (Edit5의 키DOWN 에벤트에서...)
if VK_UP then
begin
Sender := Edit1; // 왜 Edit1을 넣는지는 아시겠죠?
SelectNext(Sender as tWinControl, True, True);
end;
이런 식으로 일일이 다 지정 해주는 겁니다. (VK_DOWN, VK_LEFT, VK_RIGHT 모두)
아니면 이 방법도 괜찮겠죠? (5에서요)
if VK_UP then Edit2.SetFocus;
if VK_DOWN then Edit8.SetFocus;
if VK_LEFT then Edit4.SetFocus;
if VK_RIGHT then Edit6.SetFocus;
그리구요 이건 노파심(?)에서 하는 소린데요.
VK_LEFT와 VK_RIGHT는 처리를 안해 주시는게 좋을듯 싶네요.
왜냐면... 문자 수정시 애를 먹을테니 말이죠. ^.^
이상 청주에서 무지하게 무식한 종미니 였습니다.
즐통~
P.S 참! 핸들 가지고 처리를 하는 이 방법도 있습니다.
SendMessage(Handle, WM_NEXTDLGCTL, 0, 0);
|