사진 상자에서 고정 된 마우스 버튼을 어떻게 감지 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/169590

  •  05-07-2019
  •  | 
  •  

문제

마우스가 마우스 버튼이 이미 클릭되어 고정 된 사진 상자 위에있을 때 이벤트를 발사해야합니다.

문제 :

Mousedown 및 Mouseenter 이벤트 핸들러는 잘 작동하지 않습니다.

예를 들어 마우스 버튼을 클릭하고 고정하면 C#은 Mousedown 이벤트 핸들러를 발사하지만 커서가 그림 상자 위로 이동하면 마우스 버튼이 실현 될 때까지 마우스 센터 이벤트가 발사되지 않습니다.

도움이 되었습니까?

해결책

마우스를 누르면 대부분의 컨트롤이 제어 .capture 마우스 입력. 이것은 모두를 의미합니다 Mousemove 이벤트는 마우스가 끝나는 컨트롤보다는 캡처 된 원래 컨트롤로 전송됩니다. 이것은 마우스가 일반적으로 마우스에서 발생하는 캡처를 잃을 때까지 계속됩니다.

다른 컨트롤이 마우스 입력을 캡처 한 경우에도 마우스가 언제 제어 할 수 있는지 알아야한다면 실제로 한 가지 방법 만 있습니다. 응용 프로그램 내부의 다른 컨트롤로 향하는 Windows 메시지를 스누핑해야합니다. 그렇게하려면 메시지 필터를 추가해야합니다 ...

Application.AddMessageFilter(myFilterClassInstance);

그런 다음 적절한 클래스에서 ImessageFilter를 구현해야합니다 ...

public class MyFilterClass : IMessageFilter
{
    public bool PreFilterMessage(ref Message m)
    {
        if (m.Msg == WM_MOUSEMOVE)
            // Check if mouse is over my picture box!

        return false;
    }
}

그런 다음 마우스 이동 이벤트를보고 사진 상자 위에 있는지 확인하고 원하는 것이 무엇이든 할 수 있습니다.

다른 팁

마우스 이벤트

Mousedown 이벤트를 사용하여 마우스 버튼의 다운 프레스를 감지하고 이것을 설정하여 마우스가 컨트롤을 떠날 때에도 다른 마우스 이벤트를 얻을 수 있도록 TRUE로 설정하십시오. 마우스). 마우스 업이 발생할 때 캡처를 설정하여 캡처.

마우스의 상태를 확인하는 것입니다

이것은 관련이 없지만 확인할 수 있습니다. System.Windows.Control.MousePosition 그리고 그것이 있는지 확인하십시오 PictureBox.ClientRectangle, 다음을 확인하십시오 Control.MouseButtons 언제든지 버튼이 다운 될 수있는 정적 특성.

에서와 같이 :

if  (pictureBox.ClientRectangle.Contains(pictureBox.PointToClient(Control.MousePosition)))
{
   if ((Control.MouseButtons & MouseButtons.Left) != 0)
   {
     // Left button is down.
   }
}

그림 박스 컨트롤 내에서 MouseMove 이벤트를 설정하십시오.

this.myPictureBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.myPictureBox_MouseMove);

그런 다음 MouseMove 이벤트 핸들러 내에서 왼쪽 마우스 버튼 (또는 무엇이든)가 누적되는지 확인하십시오.

private void myPictureBox_MouseMove(object sender, MouseEventArgs e)
{  
     if (e.Button == MouseButtons.Left)
         // Do what you want to do
}

어떤 종류의 드래그 앤 드롭 작업을 구현하려는 경우 드래그 ... 이벤트 수신 사진 상자의 (Dragenter, Dragdrop 등) 사용하려는 내용이 있습니다. 기본적으로 소스 컨트롤의 dodragdrop 메소드를 사용하여 드래그 작업을 시작한 다음 드래그를 뒤집는 컨트롤에는 드래그가 발생합니다. 이벤트가 발생합니다.

MSDN에서 "dodragdrop"을 검색하여이를 구현하는 방법을 확인하십시오.

마우스 위치 및 제어 상대 위치를 기반으로 양식을 이동하는 가장 좋은 방법은 Ian Campbell이 게시 한 내용과 유사합니다.

    private void imgMoveWindow_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            Form1.ActiveForm.Left = Control.MousePosition.X - imgMoveWindow.Left - (imgMoveWindow.Size.Width/2);
            Form1.ActiveForm.Top = Control.MousePosition.Y - imgMoveWindow.Top - (imgMoveWindow.Size.Height/2); 
        }

    }

여기서 imgmovewindow는 그림 박스 컨트롤입니다.

Bruno Ratnieks

스나이퍼 네트워크

마우스에 깃발이나 상태를 설정하십시오. 마우스 위로 놓으십시오. 사진 상자의 화재로 마우스에있을 때 상태를 확인하십시오. 이제 사람이 무언가를 드래그 할 때 감지 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top