2014-02-09 3 views
1

나는 Windows Forms 응용 프로그램을 가지고 있으며 바탕 화면의 파일을 마우스 왼쪽 단추로 클릭하는 것과 같은 방식으로 양식에서 개체를 선택할 수 있어야합니다. 아래처럼 파일을 통해 드래그 :System.Drawing.DrawRectangle을 사용하여 선택 사각형 그리기

enter image description here

나는 나 자신에 의해 작성한 다음 코드를 가지고 있지만, 그것은 끔찍한입니다. 그것은 옳지 않아. 나는 지금 그 "선택"부분에 대해 너무 걱정하지 않는다. 나는 주로 이것을 어떻게 그리는가에 주로 관심이있다.

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()를 호출 한 후에는 폼에서 아무 것도 그리지 않습니다. 나는 분명히 뭔가 잘못하고있다. 그러나 무엇?

+0

그렇게하지 마십시오. 대신,'Paint' 이벤트를 처리하고 모든 것을 다시 그립니다. – SLaks

+0

@SLaks, 고맙습니다.하지만 이해가 안됩니다. Form 또는 Panel의 Paint 이벤트를 처리하는 경우 MouseDown/MouseMove 이벤트가없는 경우 드래그하려는 시점을 어떻게 알 수 있습니까? – 0550

+0

다시 칠하기를 강요하려면'Invalidate()'를 호출하십시오. – SLaks

답변

0

다음 스레드를 확인하십시오. 당신이 rubber band라고 찾고있는 것은 :

나는 내가 연결 Microsoft 웹 사이트에서 발견 된 일부 코드를 사용하여 결국 filled rubber band in Winforms Application

+0

링크 및 용어에 감사드립니다! – 0550