我正在尝试使用我自己的布局引擎创建自定义面板控件。我需要添加到我的面板的每个控件都添加到下面并采用全宽(-padding),如下所示:
下面是我的代码:
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Layout;
namespace VContainer
{
internal class VerticalFillList : Panel
{
public VerticalFillList()
{
AutoScroll = true;
MinimumSize = new Size(200, 200);
Size = new Size(200, 300);
Padding = new Padding(10);
}
private readonly VerticalFillLayout _layoutEngine = new VerticalFillLayout();
public override LayoutEngine LayoutEngine
{
get { return _layoutEngine; }
}
private int _space = 10;
public int Space
{
get { return _space; }
set
{
_space = value;
Invalidate();
}
}
}
internal class VerticalFillLayout : LayoutEngine
{
public override bool Layout(object container, LayoutEventArgs layoutEventArgs)
{
var parent = container as VerticalFillList;
Rectangle parentDisplayRectangle = parent.DisplayRectangle;
Point nextControlLocation = parentDisplayRectangle.Location;
foreach (Control c in parent.Controls)
{
if (!c.Visible)
{
continue;
}
c.Location = nextControlLocation;
c.Width = parentDisplayRectangle.Width;
nextControlLocation.Offset(0, c.Height + parent.Space);
}
return false;
}
}
}
上面的代码工作正常,除了一件事:当我将控件添加到我的容器时,它们被正确添加(父级下方的新控件,100% 宽度),但是当控件的高度大于我的容器高度时,我得到水平滚动条,但之后添加几个控件更多的滚动条被删除。
当我想调整容器大小时也会发生同样的事情:
如何解决这个问题?我只需要删除那个水平滚动条。
当然,欢迎所有改进:)
我不想使用表格布局或流布局,因为这正好在我需要的时候给了我。
我需要一个简单的容器,从上到下对所有子控件进行排序并水平拉伸它们,以便它们占用尽可能多的宽度,因此不需要容器水平滚动条。