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

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

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

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

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

감사합니다.

1개의 좋아요

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

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

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

1개의 좋아요

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

1개의 좋아요

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

1개의 좋아요

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

1개의 좋아요

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

1개의 좋아요

댓글 감사합니다.

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

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

1개의 좋아요

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

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

3개의 좋아요

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