2010-08-14 2 views
1

TableLayoutPanel에서 파생 된 클래스가 있습니다. 이 클래스 메이크업 테이블 수정 (그리드 3x8) 및 일부 셀에 일부 체크 박스를 추가하십시오. 이 모든 작업은 InitLayout() 함수를 재정 의하여 수행됩니다.Windows (Form) 컨트롤 재정의 TableLayoutPanel 질문

public class TableLayoutPanelHours : TableLayoutPanel 
{ 
    protected override void InitLayout() 
    { 
     RowCount = 3; 
     ColumnCount = 8; 

     // Set some column and row styles 
     RowStyles[0].SizeType = SizeType.Percent; 
     RowStyles[0].Height = (100/RowCount); 
     // ... etc ... 

     // ... create checkbox with the name checkbox1 
     Controls.Add(checkbox1, 1, 1); // Put in cell 1x1 
     // ... etc ... 
    } 
} 

빌드 후 컨트롤은 VS2010의 도구 상자에서 사용할 수 있습니다.

그런 다음 컨트롤을 간단한 Windows Form에두면 사용자가 알 수없는 몇 가지 문제가 발생합니다. - 컨트롤이 아직 디자인 모드에서 메이크업이 아닙니다. TableLayoutPanel은 기본 2x2 격자를 표시하며 체크 상자는 이상한 장소에 있습니다.() 양식, 나는이 선이 나타납니다 참조를 InitializeComponent에서 :

// 
// tableLayoutPanelHours1 
// 
this.tableLayoutPanelHours1.ColumnCount = 8; 
this.tableLayoutPanelHours1.ColumnCount = 3; 
this.tableLayoutPanelHours1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); 
// .... 

나는이 선 것을 제외했다 그리고 - 실행 후 컨트롤 (올바르게 장소에 체크 박스와 3x8 그리드) 제대로 표시됩니다 Windows Forms의 InitializeComponent()에는 표시되지 않지만이 문제가 발생하는 이유는 무엇입니까?

감사합니다.

답변

0

당신은 TLP를 디자이너와 싸우고 있습니다. 디자인 모드에서 작동하는 방식을 명확하게 볼 수 있으므로 사용자 정의 기능입니다. InitLayout() 메서드를 사용하여 TLP를 초기화하는 것은 정확하지 않습니다. 너무 늦었습니다. 대신 생성자에서 수행해야합니다.

하지만 여전히 원하는대로 할 수는 없지만 TLP 디자이너는 2x2로 초기화 할 때 행과 열의 수를 하드 코딩합니다. 그리고 InitLayout에서와 마찬가지로 디자인 타임에 코드를 변경하는 코드를 처리 할 수 ​​없으며 청취 할 이벤트가 없습니다. 그 디자이너를 포기해야합니다.

TLP를 이미 원하는 방식으로 초기화 했으므로 괜찮을 것입니다. [Designer] 특성을 사용하여 ControlDesigner로 되돌아갑니다. 그것이 당신의 통제를위한 어려움이라면 당신은 당신 자신의 디자이너를 만들어야 할 것입니다. Reflector를 사용하여 내부 TableLayoutPanelDesigner 클래스를 살펴보고 시작하십시오. 그것은 단순한 디자이너가 아니라는 점에 유의하십시오.

해당 속성의 [DefaultValue] 특성이 다른 기본값을 선언하기 때문에 InitializeComponent에서 해당 속성 할당을 볼 수 있습니다. 클래스에 개인 ShouldSerializeRowCount (및 ColumnCount) 메서드를 추가하여이 문제를 해결할 수 있습니다. 속성이 직렬화되지 않도록하려면 false를 반환합니다.

+0

한스, 귀하의 정보에 감사드립니다! 클리어 리. 감사. – robertpnl

+0

당신을 진심으로 환영합니다. 그리고 도움이되지 못했던 많은 답변에서 저의 지도력에 공헌 해 주신 것에 대해 감사드립니다. 300 가까워지고있다! –