2013-07-23 12 views
2

나는 다음과 같은 C# 코드를 사용하여 사용자 정의 컨트롤에 7 × 5 격자를 그리기 위해 노력하고 있어요 :선 그리기

Pen p = _createPen(Brushes.Red); 

int slotWidth = this.Width/7; 
int slotHeight = this.Height/5; 

// columns = days 
for (int c = 1; c < 7; c++) 
{ 
    // rows = weeks 
    for (int r = 1; r < 5; r++) 
    { 
     g.FillRectangle(Brushes.LightGray, new Rectangle(1, ((r - 1) * slotHeight) + 1, this.Width - 2, 10)); 
     g.DrawLine(p, new Point(0, r * slotHeight), new Point(this.Width, r * slotHeight)); 
      } 
     g.DrawLine(p, new Point(c * slotWidth, 1), new Point(c * slotWidth, this.Height - 2)); 
    } 
} 

오전 데 문제는 마지막 열의 라인 그리기된다는 것이다 채워진 직사각형 위에 있지만 다른 것은 그렇지 않습니다. FillRectangle()이 먼저 완료되어 후속 DrawLine() 메서드가 사각형 위에 그림을 그려야하는 이유는 확실하지 않지만 그렇게하지는 않습니다.

코드는 사용자 컨트롤의 Paint() 이벤트에 추가되었습니다.

+2

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야한다"는 것을 참조하십시오. –

+0

나는 장래에 그 하나를 기억하려고 노력할 것이다. – Intrepid

답변

4

간단한 장소 라인 : 당신의 행에 대한 루프에 대한 이전

g.DrawLine(p, new Point(c * slotWidth, 1), new Point(c * slotWidth, this.Height - 2));

.

// columns = days 
    for (int c = 1; c < 7; c++) 
    { 
     g.DrawLine(p, new Point(c * slotWidth, 1), new Point(c * slotWidth, this.Height - 2)); 
     // rows = weeks 
     for (int r = 1; r < 5; r++) 
     { 
      g.FillRectangle(Brushes.LightGray, new Rectangle(1, ((r - 1) * slotHeight) + 1, this.Width - 2, 10)); 
      g.DrawLine(p, new Point(0, r * slotHeight), new Point(this.Width, r * slotHeight)); 
     }    
    } 

마지막 줄은 다음 반복이 없기 때문에 다른 줄을 그리는 것입니다. 마지막 반복 전에 반복 할 때마다 빨간색 줄이 사각형으로 채워집니다.

+0

나는 그것을 시도했지만 여전히 차이가 없었다. – Intrepid

+0

나는 그것을 로컬에서 시도했고 정확한 코드 조각으로 작업했다. 뭔가 잊었 니? – Mark

+0

같은 코드를 빈 폼에서 사용해 보았습니다. 페인트 이벤트에 넣으면 작동했습니다. 채워진 직사각형 위에 세로선이 그려지기를 기대하면서 사용자 컨트롤에 대해 다른 무언가가 있어야하지만 그럴 수는 없습니다. 해결 방법은'FillRectangle'과'DrawLine' 메소드를 루프 용으로 나누어서 작동시키는 것입니다. – Intrepid