2012-04-26 2 views
2

Invalidate 메서드를 이해하지 못했다고 생각합니다 ... mousedown에서 마우스의 위치에 사각형의 왼쪽 위 모서리가있는 사각형을 그리고 나서 오른쪽 아래 모서리가 마우스의 현재 위치. 다음은 MouseMove 이벤트에서 트리거되는 메서드입니다. 부모는 pictureBox 자식이있는 패널입니다. (나는 이것들을 위에 그리려하고있다.)C# 그래픽 무효화

문제는 pictureBoxMain.Invalidate() 인 것 같다. 주석을 달았을 때 코드는 예상대로 동작하고 거대한 사각형을 그립니다. 나는 무효화 라인을 주석을 해제하면

[I가있는 PictureBox에 무효화 메소드를 호출 따라서 이유에 PictureBox에 의해 생성 g 그래픽은.]

다음 상자를 마우스 이동으로하지만, 같은 무승부 곧 상자가 움직이는 것을 멈추고 사라집니다. 나는 왜 내 인생에 대해 운동 할 수 없습니다. 코드를 디버깅하려고 할 때 마우스가 움직이지 않을 때 MouseMove 메서드가 호출되는 것처럼 보입니다. 아무런 의미가 없습니다.

도움을 주시면 대단히 감사하겠습니다.

답변

1

모든 구성 요소 (버튼, 텍스트 상자, 창 ...)에는 Paint 메소드가 있습니다. 이것은 Windows에서 주기적으로 호출 (예 : 초당 50x)하여 개체를 그립니다.

당신이하는 일은 무언가를 물체에 칠하는 것입니다. 그러나 밀리 세컨드 이내에 Paint 메서드가 그것을 과도하게 페인트하기 때문에 사라집니다. 프레임의 Paint 메서드를 재정의하고 거기에 그림을 그릴 필요가 있습니다. 이렇게하면 Windows에서 묻는 모든 그림이 그려집니다.

+1

예제가 도움이 될 것입니다. OP가 윈도우 페인트 방법에 대해 배우기를 원하고, OnPaint()에 대한 예제 오버라이드를 보여주고 싶습니다. – IAbstract