2012-05-03 2 views
0

나는 컨테이너 컨트롤의 너비와 높이의 일부분 인 너비와 높이를줌으로써 동적으로 생성 된 컨트롤의 간격을 고르게하려고한다.왜 TextBox.Width 값이 할당하려고하는 값을 받아들이지 않습니까?

그러나 치수를 계산하는 함수가 올바르지 만 어떤 이유로 Width 속성에 대한 할당이 완고하게 거부됩니다. WidthToUse() 함수는 19를 반환하지만 동적으로 작성된 TextBox에 해당 값을 할당하려고하면 630으로 유지됩니다. 왜 630을 시작해야하며, 왜 배정을 거부합니까?

심지어 "작동 중"이 제대로 작동하지 않지만 높이가 너무 높습니다.이 수학을 사용하여 모든 컨트롤을 수용 할 수있는 컨트롤이 너무 많거나 패널에 충분한 공간이 없습니다. 당신이 내 생각 될 FillDock 속성 집합을 가지고 있기 때문에

int WidthToUse = getTextBoxWidthToUse(tableLayoutPanelGreatGooglyMoogly.Width); 
int HeightToUse = getControlHeightToUse(tableLayoutPanelGreatGooglyMoogly.Height); 

TextBox txtbx = new TextBox(); 
txtbx.Parent = tableLayoutPanelGreatGooglyMoogly; 
txtbx.Margin = new Padding(); 
txtbx.Dock = DockStyle.Fill; 
txtbx.AutoSize = false; 
txtbx.Width = WidthToUse; // WidthToUse is 19, but txtbx.Width is 630 both before AND after this assignment! 
txtbx.Height = HeightToUse; // HeightToUse is 27 


private static int getControlHeightToUse(int theDynPanelHeight) { 
    return (theDynPanelHeight/NUMBER_OF_ROWS); 
} 

private static int getTextBoxWidthToUse(int theDynPanelWidth) { 
    return (theDynPanelWidth/32); 
} 

private static int getLabelWidthToUse(int theDynPanelWidth) { 
    return ((theDynPanelWidth/64) * 3); 
} 
+0

DockStyle.Fill을 사용하는 경우 명시적인 크기를 설정하는 이유는 무엇입니까? – syneptody

답변

3

DockStyle.Fill은 컨테이너의 크기를 기준으로 컨트롤의 크기를 나타내는 속성입니다. 컨트롤은이 속성이 설정된 부모 컨테이너의 빈 공간에 모두 맞게 크기가 조절됩니다.

+0

OK, 그건 사실이었습니다. 이제 문제는 : "셀"의 모든 공간을 차지할 TextBox를 얻는 방법 - 그들은 상단에 집착합니다. –

+0

그래, 알겠습니다. 내가 부품을 함께 춤추 기 위해 정확한 정확한 조합을 칠 때까지 일부 문자열을 위로 당겨서 마리오네트처럼 느낀다. 홀수/좌절은 콘트롤러의 높이를 콘테이너의 높이로 나눈 값을 행수로 나눈 값을 콘테이너의 폭으로 나눈 값을 컬럼의 수로 나눈 값으로 설정하는 것입니다. –

+0

12 개의 행이있을 때 높이 나누기를 14로 설정해야했습니다. 패딩이나 다른 "보풀"이이 오프 세트 오프셋을 일으키는 것 같아요. –

2

:

여기 내 코드입니다.

관련 문제