2016-10-21 5 views
1

모든 TableLayoutPanel 행의 기본 높이를 C#에서 16px로 어떻게 설정할 수 있습니까?TableLayoutPanel에서 행의 기본 높이 설정

for (int i = 0; i < amount_of_rows; i++) 
{ 
    panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16)); 
} 

을하지만 내 경우에는 내가 8 열과 행의 알 수없는 금액이 있습니다

보통 내가 할 것입니다. 행에 대한 금액은 모든 컨트롤이 추가 된 후 알 수 있습니다.

TableLayoutPanel panel = new TableLayoutPanel 
{ 
    BackColor = SystemColors.Control, 
    CellBorderStyle = TableLayoutPanelCellBorderStyle.Single, 
    AutoScroll = true, 
    Width = 500, 
    Location = new Point(-1, -1), 
    ColumnCount = 8 
}; 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52)); 

int amountOfRows = 0; 
for (...) 
{ 
    // a lot of code which populates panel with generated controls and counts amountOfRows 
} 
panel.RowCount = amountOfRows; 
Controls.Add(panel); 

이러한 코드는 24 픽셀 높이 행을 작성합니다

이 내 코드입니다.

for (int i = 0; i < amountOfRows ; i++) 
{ 
    panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16)); 
} 

일을하지만 마지막 행이 매우 큰 수 :

이 같은 인구 후 테이블 ColumnStyles를 추가.

편집 : 컨트롤을 추가하는 등 예제 코드 :

TableLayoutPanel panel = new TableLayoutPanel 
{ 
    BackColor = SystemColors.Control, 
    CellBorderStyle = TableLayoutPanelCellBorderStyle.Single, 
    AutoScroll = true, 
    Width = 500, 
    Location = new Point(-1, -1), 
    ColumnCount = 8, 
    Margin = new Padding(0), 
    Padding = new Padding(0) 
}; 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52)); 

for (int i = 0; i < 10; i++) // lets assume we don't know it will be added 10x 
{ 
    CheckBox exchangeEnabled = new CheckBox 
    { 
     Margin = new Padding(0), 
     Padding = new Padding(0), 
     Dock = DockStyle.Fill, 
     CheckAlign = ContentAlignment.MiddleCenter 
    }; 
    panel.Controls.Add(exchangeEnabled, 0, i); 
} 
Controls.Add(panel); 

답변

0

난 당신이 24 개 픽셀의 높이 세포를 얻는 이유는 당신이 16 개 픽셀의 높이와 컨트롤을 추가하는 것입니다 있다고 가정합니다.

값을 변경하지 않는 한 기본값 MarginPadding 값은 모든면에서 3 픽셀입니다.

이렇게하면 2x3 + 2x3 픽셀의 여분이 생겨 셀의 총 높이가 24 픽셀이됩니다.

높이를 제어하려면 추가하는 컨트롤의 높이뿐만 아니라 TLP의 Padding과 자식의 Margin 값도 제어해야합니다.

자식 컨트롤의

MSDN:

도킹 동작입니다 .. 또한 행 또는 열 내가 픽셀 완벽한 방식으로 컨트롤을 배치/정렬을 알고있는 유일한 방법을 확대하는 방법입니다 다른 컨테이너 컨트롤과 동일합니다.

TableLayoutPanel에서 자식 컨트롤의 고정 동작은 과 다른 컨테이너 컨트롤의 동작이 다릅니다. 자식 컨트롤의 Anchor 속성 값이 Left 또는 Right로 설정된 경우 컨트롤은 컨트롤의 Margin 속성과 패널의 합계 인 거리에 셀의 왼쪽 또는 오른쪽 테두리에 배치됩니다. Padding 속성. Left 및 Right 값을 모두 설정하면 컨트롤의 여백이 이고 채우기 값이 고려 된 셀 너비에 맞게 조정됩니다. 상단 및 하단 고정에 대한 동작은 유사합니다. 자세한 내용은 방법 : 앵커 및 TableLayoutPanel 컨트롤에서 자식 컨트롤 도킹을 참조하십시오.당신이 다른 컨테이너 컨트롤의 기본 고정 동작을 모방하는 자식 컨트롤이 필요하면

, 당신은 컨트롤의 경계와 셀의 경계 사이에 일정한 거리를 유지하기 위해 특성을 여백을 조정하고 패딩 수 있습니다.

+0

고맙지 만 변경되지 않습니다. 나는 Margin = 새로운 Padding (0), Padding = 새로운 Padding (0)을 TableLayoutPanel과 그 컨트롤에 추가했다. 나는 컨트롤 추가를 포함한 예제 코드를 추가했다. 아니면 내가 너를 완전히 이해하지 않았 니? – LukAss741

+0

흠, 아니, 너는 나에게 맞았다. 큰 여백/여백을 설정할 때 영향을 볼 수 있습니까? - 최대 값은 얼마입니까? 높이? 기본적으로 CheckBox는 자동 크기 조정을 사용하므로 높이는 글꼴 크기에 따라 다릅니다. – TaW

+0

모든 컨트롤에서 Height = 16으로 설정. 여백과 여백이 0 인 경우에도 여전히 어떤 이유로 주변에 공간이 추가됩니다. 정확한 높이를 지정하면 작동합니다. 저에게 올바른 방향을 알려 주셔서 감사합니다. – LukAss741