나는 Windows Forms 응용 프로그램을 가지고 있으며 바탕 화면의 파일을 마우스 왼쪽 단추로 클릭하는 것과 같은 방식으로 양식에서 개체를 선택할 수 있어야합니다. 아래처럼 파일을 통해 드래그 :System.Drawing.DrawRectangle을 사용하여 선택 사각형 그리기
나는 나 자신에 의해 작성한 다음 코드를 가지고 있지만, 그것은 끔찍한입니다. 그것은 옳지 않아. 나는 지금 그 "선택"부분에 대해 너무 걱정하지 않는다. 나는 주로 이것을 어떻게 그리는가에 주로 관심이있다.
private void splitContainer1_Panel1_MouseMove(object sender, MouseEventArgs e)
{
if (mouseDown)
{
// TODO: Draw Rectangle (so you can select elements on the canvas).
Graphics graphics = Graphics.FromHwnd(splitContainer1.Panel1.Handle);
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Pen pen = new Pen(Color.SlateBlue, 0.5f);
graphics.PageUnit = GraphicsUnit.Pixel;
graphics.DrawRectangle(pen, e.X, e.Y, (e.Location.X + e.X) - lastCursorLocation.X, (e.Location.Y + e.Y) - lastCursorLocation.Y);
}
}
업데이트
개인 무효 splitContainer1_Panel1_Paint (개체를 보낸 사람,있는 PaintEventArgs 전자) { // TODO : 사각형 그리기 (그래서 당신이 캔버스에 요소를 선택할 수 있습니다.)
Graphics graphics = Graphics.FromHwnd(splitContainer1.Panel1.Handle);
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Pen pen = new Pen(Color.SlateBlue, 0.5f);
graphics.PageUnit = GraphicsUnit.Pixel;
graphics.DrawRectangle(pen, 1, 1, 1, 1);
Invalidate();
}
코드를 Paint 이벤트에 배치하고 Invalidate()를 호출 한 후에는 폼에서 아무 것도 그리지 않습니다. 나는 분명히 뭔가 잘못하고있다. 그러나 무엇?
그렇게하지 마십시오. 대신,'Paint' 이벤트를 처리하고 모든 것을 다시 그립니다. – SLaks
@SLaks, 고맙습니다.하지만 이해가 안됩니다. Form 또는 Panel의 Paint 이벤트를 처리하는 경우 MouseDown/MouseMove 이벤트가없는 경우 드래그하려는 시점을 어떻게 알 수 있습니까? – 0550
다시 칠하기를 강요하려면'Invalidate()'를 호출하십시오. – SLaks