在C#WinForms中,如果控件停靠,则永远不会使用边距。在大多数情况下,诀窍是将控件放在带有一些填充的面板中。现在我正在寻找没有容器面板的解决方案,因为我的控件已经是面板的后代。因此,对于用户而言,我会将大多数属性从容器面板路由到内部面板,这会让人感到困惑。
我的第一次尝试是自定义LayoutEngine,但该主题并不多。但它有点工作。但我对周围(兄弟控制)的一些问题,他们重叠我控制“更大”(边缘)的部分。在我的自定义layoutengine是使控件尺寸更大(添加边距)并相应地移动x / y
绿色控件是我的自定义面板,底部停靠,边距为10,红色控件是一个普通面板,底部也停靠。
现在我可以调整兄弟控件的大小,但我认为这会产生更多问题?有没有办法告诉其他(兄弟)控件我的控件的大小已经改变,他们应该更新他们的布局?
public class CustomLayoutEngine : LayoutEngine
{
public override bool Layout(object container, LayoutEventArgs layoutEventArgs)
{
bool result = base.Layout(container, layoutEventArgs);
Control parent = container as Control;
if (parent.Dock == DockStyle.Bottom && (parent.Margin.Left > 0 || parent.Margin.Right > 0))
{
Int32 newWidth = parent.Size.Width - (parent.Margin.Left + parent.Margin.Right);
Int32 newHeight = parent.Size.Height - (parent.Margin.Bottom);
parent.Size = new Size(newWidth, parent.Size.Height);
parent.Location = new Point(parent.Location.X + parent.Margin.Left, parent.Location.Y - parent.Margin.Bottom);
}
return result;
}
}