2010-02-01 5 views
1

다시, 컨테이너 상단에 도킹 할 때 flowlayoutpanel을 자동 크기 조정하려고 시도하는 것에 대해 this question 게시했습니다. 내가 달성하려고했던 것은 폼의 위쪽 가장자리를 가로 지르는 수평 (왼쪽에서 오른쪽으로) flowlayoutpanel을 설정하고, flowlayoutpanel 아래의 나머지 공간을 차지하는 datagridview를 설정하는 것이었다. 나는 flowlayoutpanel의 높이 속성을 자동 크기 조정하는 데 어려움을 겪고있었습니다. 게시 된 대답은 내가 뭘하려고했는지에 대해 완벽하게 작동했는데 ... 큰 문제였습니다.WinForms UserControl 레이아웃 자동 크기 조절 문제

혼자서는 충분히 떠날 수 없었습니다. 이제 한 단계 더 나아가서 UserControl에서 flowlayoutpanel을 래핑하려고합니다. 그러나, 이렇게하면 flowlayoutpanel이 더 이상 높이를 적절하게 조정하지 않게된다는 것을 발견했습니다. flowlayoutpanel 제대로 높이의 크기를 조정하지 않고, 어떤 이유를 들어

UserControl (Autosize = true, Dock = Top) 
    FlowLayoutPanel1 (Autosizse = true, Dock = Fill) 
    ComboBox1 
    ComboBox2 
    ComboBox3 
DataGridView1 (Dock = Fill) 

:

FlowLayoutPanel1 (Autosize = true, Dock = Top) 
    ComboBox1 
    ComboBox2 
    ComboBox3 
DataGridView1 (Dock = Fill) 

그리고 여기에는 UserControl을에 싸여 flowlayoutpanel 함께 :

여기 아름답게 작동하는 최초의 레이아웃은이다 양식 크기가 조정될 때. 이것은 재현하기가 매우 쉽습니다. Oh, 또한 ComboBoxes뿐만 아니라 FlowLayoutPanel의 내용도 될 수 있습니다.

답변

1

제가 생각하기에 문제는 당신이 FlowLayoutPanel1.Dock = Fill을 가지고있어 높이를 자동 크기 조정하려는 시도보다 우선한다는 것입니다.

수정 프로그램은 아마도 이전에했던 것처럼 FlowLayoutPanel1.Dock = Top으로 설정 한 다음 FlowLayoutPanel1.Resize 이벤트를 처리하여 사용자 정의 컨트롤의 크기를 조정할 수 있습니다. 본질적으로는을 FlowLayoutPanel1.Size과 동기화하여 수동으로 시도하고 있습니다.

는 할 수있는 현명한 방법이있을 수 있지만 희망이

+0

거의 작동합니다. Resize 이벤트는 완벽하게 작동하지만 Resize 이벤트가 실행되도록 폼의 크기를 조정해야합니다. 이 크기 조정은 크기가 조정 된 후에뿐만 아니라 처음에 양식이 표시 될 때 발생하도록하고 싶습니다. UserControl.Load, Layout, VisibleChanged 및 Paint 이벤트를 성공하지 못했습니다. – echo

+2

FlowLayoutPanel.SizeChanged 이벤트가 있다는 것을 알아 차릴 수 있습니까? 나는 VS가 설치된 컴퓨터 근처에 있지 않아서 직접 놀 수는 없다. FlowLayoutPanel.ControlAdded 이벤트를 시도 할 수도 있습니다. –

+0

SizeChanged가 트릭을 수행했습니다. 감사 – echo

0

UserControl 너비가 설정되어 있습니까? designer.cs를 확인하십시오. 그럴 경우 해당 속성을 재설정해야합니다.

+0

폭은 확인을 작동하는 것 같군,하지만 높이가 일정하게 유지 ... 옳은 길에 당신을 얻을 것이다. flowlayoutpanel의 자식이 줄 바꿈되어 새로운 줄을 만들면 그에 따라 높이가 증가하지 않고 자식이 세로로 잘립니다. – echo