独自のレイアウトエンジンを使用してカスタムパネルコントロールを作成しようとしています。パネルに追加されたすべてのコントロールを下に追加し、以下のように全幅(-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;
}
}
}
上記のコードは、1つを除いて正常に機能します。コンテナにコントロールを追加すると、正しく追加されます(親の下に新しく、幅100%)が、コントロールの高さがコンテナの高さよりも大きい場合は、水平スクロールバーが表示されます。カップルコントロールを追加すると、スクロールバーが削除されます。
コンテナのサイズを変更したい場合も同じことが起こります。
これはどのように修正できますか?その水平スクロールバーを削除する必要があります。
もちろん、すべての改善は大歓迎です:)
テーブルレイアウトやフローレイアウトは、必要なときに正確に表示されるため、使用したくありません。
すべての子コントロールを上から下に並べて水平方向に伸ばすシンプルなコンテナーが必要です。これにより、コンテナーの水平スクロールバーが不要になります。