요즘 삽질이 굉장히 많아진 것 같다
너무 간만에 Winform을 하다보니 그런가.. 얼른 WEB으로 넘어가야하는데..
이번 삽질은 저번에 한/영모드보다 더 오래 헤맨 끝에 해결할 수 있었는데 너무 간단히 해결되서 허무할 정도...
일단 문제는 TextBox 컨트롤에 입력된 값들을 모두 초기화하고 다시 TextBox가 있는 패널을 띄울 때 발생했다.
이런식으로 TextBox에 입력한 상태에서 초기화가 되는 경우
(키오스크는 특정 시간동안 입력이 없을 경우 메인으로 띄어줘야 하기 때문)
다시 창을 띄었을때 키보드 버퍼가 남아있어서인지 뭔지 모르겠지만 TextBox에 ㅎ이 계속 남아있었다.
keybd_event()를 이용해 백스페이스도 먹여보고 Focus()를 다른데 줘보고 별짓 다해봤는데 어떤 꼼수도 통하지 않았다..
그렇게 모든 키워드를 다 쳐가서 머리를 짜내다가 결국 도움이 되는 걸 찾아냈다.
참조사이트:https://www.python2.net/questions-28884.htm
winforms (C #)에서 버튼을 부딪친 후 마지막 활성 입력 TextBox에 'SendKeys'하는 방법은 무엇입니까?
와이즈 비즈 방법 마지막 활성 입력 SendKeys winforms (C #)에서 버튼을 클릭 한 후? C #을 처음 사용하고 화상 키보드로 winforms 응용 프로그램을 만들려고하는데 여러 개의 텍스트 상자가 있습니다.
www.python2.net
keybd_event()함수가 WinApi이기 때문에 분명히 버퍼에 들어있을 것 같다고 생각했는데 그게 맞았던 것 같다.
'SendKeys'를 이용해 간단하게 해결할 수 있었다.
Intelligence기능을 보니 SendKeys.Flush()가 있길래 초기화 함수에 한줄을 추가했더니 결국 제대로 초기화가 되었다.
초기화 함수 안에 백스페이스 입력 신호를 넣고 SendKeys.Flush()를 호출하니 입력신호가 처리되는 것 같다.
해결법은 아래처럼 간단하다.
//백스페이스 입력하기
keybd_event((byte)Keys.Back, 0, 0x00, 0);
keybd_event((byte)Keys.Back, 0, 0x02, 0);
//현재 메시지큐에 있는 모든 메시지 처리함수
SendKeys.Flush();
그동안 keybd_event만 먹여도 잘만 들어가던게 꼭 필요할 땐 동작을 안하니 희안할 따름이다.
그리고 내가 생각한 구조라면
//백스페이스 입력하기
keybd_event((byte)Keys.Back, 0, 0x00, 0);
keybd_event((byte)Keys.Back, 0, 0x02, 0);
//다른 값 입력하기 아래 값은 숫자 1
keybd_event((byte)Keys.D1, 0, 0x00, 0);
keybd_event((byte)Keys.D1, 0, 0x02, 0);
//현재 메시지큐에 있는 모든 메시지 처리함수
SendKeys.Flush();
이렇게 하면 TextBox에 1이 생겨야 할 것 같은데 아무것도 안남는다. 그렇다고 SendKeys.Flush()만 사용해서 사라지는 것도 아니고... 원인은 모르고 해결만 한 것 같은데 원인을 아시는 분은 댓글로 알려주시면 감사하겠습니다
결국 혼자 개발하려니 삽질은 길고 해결은 참 허무하다
프로그래머스 코딩테스트 연습 -해시 3(위장) (0) | 2020.09.18 |
---|---|
프로그래머스 코딩테스트 연습 -해시 2(전화번호 목록) (0) | 2020.09.17 |
프로그래머스 코딩테스트 연습 -해시 1(완주하지 못한 선수) (0) | 2020.09.16 |
C# keybd_event를 이용해 키오스크 키패드 만들기 (0) | 2020.07.16 |
댓글 영역