编程语言
首页 > 编程语言> > c# – FlowLayoutPanel使用AutoSize时的高度错误

c# – FlowLayoutPanel使用AutoSize时的高度错误

作者:互联网

我有一个表格,其中包含一个包含1列和3行的TableLayout,其中包含2个FlowLayoutPanel和一个文本框.
所有行都是AutoSize,列设置为百分比= 100%.

每个FlowLayoutPanel都包含多个TextBox.
设置FlowLayoutPanel:LeftToRight,AutoSize = true,GrowAndShrink,Docking = Fill.

大纲是:

Form
    TableLayout (Dock=Fill)
        FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
           More controls
        FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
           More controls
        TextBox(Dock=Fill, MultiLine=true)

问题是如果我将FlowLayoutPanel放在GroupBox中并且也设置为AutoSize = true,则FlowLayoutPanel高度未正确设置并且它在1行中显示TextBoxes,从表单中剪切一些TextBox.

大纲是:

Form
    TableLayout (Dock=Fill)
        GroupBox (Dock=Fill, AutoSize=True, GrowShrink) 
            FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
               More controls
        GroupBox (Dock=Fill, AutoSize=True, GrowShrink) 
            FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
               More controls
        TextBox(Dock=Fill, MultiLine=true)

顺便说一下,如果我使用GroupBox,Panel或者甚至是UserControl来保存FlowLayoutPanel,也会发生同样的事情.

BTW 2,即使没有TableLayout也会发生这种情况.我尝试将GroupBox(带有FlowLayoutPanel)放在AutoSized表单上,我得到了相同的行为.

我认为问题是当FlowLayoutPanel在另一个也是AutoSized的容器中时,它无法传递给它的容器是首选大小.

可以做些什么来覆盖这个bug?

请帮忙
谢谢,
约拉姆

p.s:我必须使用GroupBox在TextBoxes周围有一个漂亮的框架.

解决方法:

我也遇到过这个问题,并试图找出如何轻松解决这个问题.
虽然@ GertArnold的答案确实有帮助,但感觉有点麻烦,我寻找另一个解决方案.

我发现Flow Panel的自动调整逻辑正在处理“最小”要求,并且通过添加一个最小高度的空白面板,我能够强制Flow Panel的宽度,从而使所有其他子控件都可见.

所以在上面的例子中,最终的布局是:

Form
    TableLayout (Dock=Fill)
        GroupBox (Dock=Fill, AutoSize=True, GrowShrink) 
            FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
                Panel(Dock=Fill, Height = 1, MinimumSize = new System.Drawing.Size( Form.ClientSize.Width - TableLayout.Padding.Horizontal, 1))
                More controls
        GroupBox (Dock=Fill, AutoSize=True, GrowShrink) 
            FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
                Panel(Dock=Fill, Height = 1, MinimumSize = new System.Drawing.Size( Form.ClientSize.Width - TableLayout.Padding.Horizontal, 1))
                More controls
        TextBox(Dock=Fill, MultiLine=true)

希望这可以帮助.

标签:c,winforms,flowlayoutpanel,form-layout,groupbox
来源: https://codeday.me/bug/20190626/1293943.html