내 레이아웃 엔진을 사용하여 사용자 지정 Panel 컨트롤을 만들려고합니다. 코드 위레이아웃 엔진이있는 사용자 지정 패널
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;
}
}
}
잘 작동 : 아래
내 코드입니다 : 나는 다음과 같이 아래에 추가 할 수 및 전체 폭 (-padding) 걸릴 내 패널에 추가 할 때마다 컨트롤이 필요합니다 , 단 한가지 제외 : 컨테이너에 컨트롤을 추가 할 때 컨테이너가 올바르게 추가됩니다 (부모, 100 % 너비 이하).하지만 컨트롤 높이가 컨테이너 높이보다 클 때 가로 스크롤 막대가 표시되지만 몇 가지 컨트롤을 추가하면 더 많은 스크롤바가 제거됩니다. 이
를 고정 할 수있는 방법 : 내 컨테이너의 크기를 조정하고자 할 때
똑같은 일이 일어날까요? 나는 그 수평 스크롤바를 제거 할 필요가있다.
는 물론 모든 개선 : 내가 필요로 할 때이 사람이 바로 저를주기 때문에 나는 테이블 레이아웃을 사용하거나 레이아웃 흐름 싶지 않아
환영합니다.
모든 하위 컨트롤을 위에서 아래로 순서대로 정렬하고 가로로 늘어서서 컨테이너의 가로 스크롤 막대가 필요하지 않도록 많은 너비를 차지하는 간단한 컨테이너가 필요합니다.
button1.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
그래서 그들은 여기
을하지만, 그것은 당신이 영원히 뉴스 bottons를 넣어 수없는 고정 할 경우 ... O_O – MayogaX
@MayogaX - 나는 그것을 안다 : 나는 단지 나의 요점을 보여주고 싶었다. 단추 대신 사용자 지정 컨트롤이 있습니다. 내 요점은 내 패널이 어떻게 행동하는지 보여 주려했다. 대부분의 경우 2-3 개의 컨트롤이 있지만 사용자가 새 컨트롤을 추가 할 때 가로 스크롤 막대가 보이면 상황을 피하기를 원합니다. 응용 프로그램의 크기를 조정하는 것과 동일한 상황입니다. 나는 거기에 5 ~ 6 개의 컨트롤을 들고있을거야. 위는 원하지 않는 동작을 보여주는 데모 일뿐입니다. – Misiu
WinForm 디자이너가 LayoutEngine 클래스에서주의 깊게 밟은 문제를 해결하려고합니다. 이와 같은 레이아웃은 * 쌍 안정 *입니다. 이 문제를 해결하려는 가장 일반적인 결과는 수평 스크롤 막대가 깜박 거리면서 끝이없는 루프에 갇히게됩니다. 당신은 수업을 재발 명하고 같은 방식으로 그렇게 끝내게 될 운명입니다. –