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