c# winform mousemove가 다른 컴포넌트 위로 올라갈경우 호출이 안됩니다.

안녕하세요.
C# 메인 winform창에서 mouusemouse이벤트를 걸었습니다.
마우스 위치를 계속 체크해야 합니다.
일반적인 폼에서는 잘 호출 됩니다.

하지만, 마우스가 inputpenel이나, button, menustrip, label 위로 올라가면 mouse_move가 호출이 안됩니다.

inputpenel, button, menustrip, label 에 각각 이벤트를 걸어주는게 최선일까요?

더 좋은 방법이 있으면 도움 부탁드립니다.

감사합니다.

1 Like

winform에선 WPF처럼 이벤트 버블링/터널링 처리가 없어서 지극히 정상 입니다.

말씀 하신 것 처럼 모든 요소에 해당 이벤트를 처리 하던지

최상위 윈도우에서 윈도우 핸들을 후킹해서 mouse move 이벤트를 처리 하는 방법이 있습니다.

1 Like

답변 감사합니다.
손이 최소한 가능 방법으로 찾아봐야겠습니다.

1 Like

form에 KeyPreview 속성값을 True로 바꿔보세요

1 Like

네. 처음부터 True 했었습니다.

1 Like

폼 로드 이벤트 에서
폼내 모든 컨트롤 루프 돌면서 마우스 이벤트를 하나의 메소드로 할당 한 후에
해당 메소드 에서 처리… 하면 안될랑가여 ?

1 Like

댓글 감사합니다.

화면 좌측,우측, 하단에 있는 컨트롤들을 조금씩 화면 중심으로 더 이동시켜 여백을 만들었습니다.
메뉴부분만 이벤트를 줘서 잡았습니다.

어느정도 기능 개발 마무리되면, 변경해볼 방법으로 검토중입니다.
마우스가 왔을때 다른일들을 해야 하는것들도 있어서, 하드코딩으로 그분할수가 없을것 같아, 조금 더 고민하고있습니다.

1 Like

어떤 식으로 더 활용하실지 모르겠지만, RawInput으로 메시지를 항상 받을 수는 있습니다.

.NET Framework: 788. RawInput을 이용한 키보드/마우스 입력 모니터링 (sysnet.pe.kr)

3 Likes

한번 확인해보겠습니다.
감사합니다.