【发布时间】:2015-05-20 06:37:16
【问题描述】:
在 FlowLayoutPanel 的 ClientSizeChanged 事件上调整其子项的大小时,我遇到了 FlowLayoutPanel 的问题。
当 FlowLayoutPanel 调整大小时,我试图让孩子水平调整大小。问题是即使child的margin为0,FlowLayoutPanel的padding也为0,但是在ClientSizeChanged事件处理程序执行后,FlowLayoutPanel显示了它的水平滚动条,而child的宽度是与 FlowLayoutPanel.ClientSize.Width 完全相同。
我尝试将代码移动到 Resize 事件,但仍然得到相同的结果。
这是一个演示问题的示例,有一个 FlowLayoutPanel 的以下属性已从默认值更改:
- 自动滚动 = 真
- FlowDirection = 自上而下
- 保证金 = 0,0,0,0
- 名称 = flow1
- BackColor = 红色
FlowLayoutPanel 内部还有一个常规面板:
- 保证金 = 0,0,0,0
- 名称 = panel1
- 背景颜色:蓝色
最后,一个间隔为 1 的计时器,它改变 FlowLayoutPanel 的宽度并在 FlowLayoutPanel 的 HorizontalScroll.Visibile 属性为 true 时禁用自身,并显示一个消息框,宣布 panel1 的宽度和 flow1 的 ClientSize.Width .
代码如下:
private void timer1_Tick(object sender, EventArgs e)
{
flow1.Width -= 1;
if (flow1.HorizontalScroll.Visible)
{
timer1.Enabled = false;
MessageBox.Show("Panel.Width = " + panel1.Width.ToString() +
", FlowPanel.ClientWidth = " + flow1.ClientSize.Width.ToString());
}
}
private void flow1_ClientSizeChanged(object sender, EventArgs e)
{
panel1.Width = flow1.ClientSize.Width;
}
当没有孩子溢出客户端大小时,显示水平滚动条背后的逻辑是什么?最重要的是,如何防止它发生?
【问题讨论】:
标签: c# resize scrollbar flowlayoutpanel