2012-08-23 7 views
0

나는 다음과 같이 TableLayoutPanel/정의 구성 확장하는 클래스를 가지고 :TableLayoutPanel 테두리 없음 첫 번째 열 주위에?

(한 위의 CellBorderStyle을 설정하는 코드를 주어진 기대하는 것처럼) 내 테이블은 모든 5 열 주위에 테두리를 가지고 그려
public class MyTableLayout : TableLayoutPanel 
{ 
    public MyTableLayout() 
    { 
     this.ColumnCount = 5; 
     this.RowCount = 1; 
     this.CellBorderStyle = TableLayoutPanelCellBorderStyle.Outset; 
    } 
} 

.

테두리가 첫 번째 열 주위로 그려지는 것을 방지 할 수있는 방법이 있습니까?

나는 당신이 CellPaint 콜백 추가 할 수 있습니다 알고

this.CellPaint += tableLayoutPanel_CellPaint; 

을이 콜백에서 당신은 특정 컬럼의 테두리 색상을 변경 같은 것을 수행 할 수 있습니다

private void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e) 
{ 
    if (e.Column == 0 && e.Row == 0) 
    { 
     e.Graphics.DrawRectangle(new Pen(Color.Red), e.CellBounds); 
    } 
} 

을하지만 어떻게해야 "No"사각형을 그립니다.

나는 Color.Empty에 색상을 설정하려하지만 그건 작동하지 않았다 :

e.Graphics.DrawRectangle(new Pen(Color.Empty), e.CellBounds); 

답변

1

주위에 그것을 다른 방법을 사용해보십시오. 오직 당신 만이 경계해야 할 셀 주위에 테두리를 그릴 :

this.CellBorderStyle = TableLayoutPanelCellBorderStyle.None; 
+0

좋은 아이디어 덕분에! –

+0

국경 그리기가'OnPaintBackground'에서 행해지므로 작동하지 않습니다. – Tergiver

+0

@JanTacci 잘게 잘리는 가장자리의 문제를 복제 할 수 없습니다. 'e.CellBounds'를 사용하는 대신'new Rectangle (Point.Empty, new Size (e.CellBounds.Width - 1, e.CellBounds.Height - 1))'을 시도해보십시오. – LarsTech

1

셀의의 그림을 : 분명히

private void tableLayoutPanel_CellPaint(object sender, 
             TableLayoutCellPaintEventArgs e) { 
    if (e.Column > 0 && e.Row == 0) { 
    e.Graphics.DrawRectangle(new Pen(Color.Red), e.CellBounds); 
    } 
} 

을 회화 작업을 인수 할 수 있도록, 당신의 국경을 다시 없음으로 설정 테두리는 OnPaintBackground 재정의의 TableLayoutPanel에 의해 수행됩니다.

경계선을 그리는 방법을 수정하려면 경계선을 설정하지 말아야합니다 (기본 클래스가 아무 것도 그리지 않음). 그런 다음 다른 경계를 모두 재정 의하여 OnPaintBackground에 페인트합니다.

TableLayoutPanel은 내부 기능인 ControlPaint.PaintTableCellBorder를 사용하여 테두리 그리기를 수행합니다. 사용할 수 없으므로 소스 코드 (Reflector 또는 ILSpy 포함)를보고 어떻게 수행했는지 확인해야합니다.