2011-12-07 3 views
0

하위 컨트롤과 동적으로 채워지는 flowLayoutPanel이 있습니다. 이 flowLayoutPanel은 다른 양식의 일부 패널에있을 수 있으므로 런타임에 크기가 변경 될 수 있습니다.FlowLayoutPanel의 레이아웃 이벤트 핸들러에서 하위 컨트롤 폭 설정

첫 번째 하위 컨트롤을 추가 할 때 해당 너비를 flowLayoutPanel.Width - 10으로 설정합니다. 다른 컨트롤의 경우 DockStyle = Fill을 설정합니다.

첫 번째 제어 폭을 변경하는 flowLayoutPanel_Layout 이벤트 핸들러도 있습니다. flowLayoutPanel.Controls [0] .Width = flowLayoutPanel.Width - 10;

대부분의 경우 제대로 작동하지만 양식 중 하나에서 문제가 발생합니다. 양식을로드하면 flowLayoutPanel에서 모든 컨트롤 폭을 하나의 값 (127)으로 설정합니다. 양식을 최대화하면 flowLayoutPanel_Layout이 올바른 flowLayoutPanel.Width (예 : 400 픽셀)로 호출되지만 flowLayoutPanel.Controls [0] .Width는 flowLayoutPanel.Width - 10으로 설정 한 후에 변경되지 않습니다. 여전히 동일합니다. 127. 예외 나 예외는 없습니다.

이러한 문제가 발생할 수있는 이유는 무엇입니까?

답변

1

문제의 뿌리를 찾았 도움 http://blogs.msdn.com/b/alejacma/archive/2008/11/20/controls-won-t-get-resized-once-the-nesting-hierarchy-of-windows-exceeds-a-certain-depth-x64.aspx

내 통제 OnSizeChanged 오버라이드 (override) :이 문제는 중첩 된 컨트롤을 많이가있을 때 64 비트 Windows Vista 및 7에 나타납니다

protected override void OnSizeChanged(EventArgs e) 
{ 
    if (!DesignMode && IsHandleCreated) 
    BeginInvoke((MethodInvoker)delegate{base.OnSizeChanged(e);}); 
    else 
    base.OnSizeChanged(e); 
} 
관련 문제