1
이미지보기 컨트롤의 각 행 사이에 공간을 수평으로 줄이려고합니다.FlowLayoutPanel의 가로 공간 줄이기
이 Windows는 FlowLayoutPanel을 형성합니다. 현재 간격을 표시하기 위해 빨간색으로 하나의 셀을 강조 표시했습니다.
이미지보기 컨트롤의 각 행 사이에 공간을 수평으로 줄이려고합니다.FlowLayoutPanel의 가로 공간 줄이기
이 Windows는 FlowLayoutPanel을 형성합니다. 현재 간격을 표시하기 위해 빨간색으로 하나의 셀을 강조 표시했습니다.
당신은 아주 쉽게 당신이 패널에서 파생하여 사용자 지정 FlowLayoutPanel을 소유 만들 수 있습니다.
아래 코드는 가로 및 세로 모두 일정한 경계선을 설정하고 있지만 지평선 및 수직 간격에 대해 각각 속성을 갖도록 쉽게 수정할 수 있습니다.
public class FlowPanel : Panel
{
protected int _TileBorder;
public int TileBorder
{
get
{
return this._TileBorder;
}
set
{
this._TileBorder = value;
this.RearrangeControls(this, this.TileBorder);
}
}
public FlowPanel()
{
this.AutoScroll = true;
}
public FlowPanel(int tileBorder)
{
this.AutoScroll = true;
this.TileBorder = tileBorder;
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
this.RearrangeControls(this, this.TileBorder);
}
protected override void OnControlAdded(ControlEventArgs e)
{
base.OnControlAdded(e);
this.RearrangeControls(this, this.TileBorder);
e.Control.SizeChanged += new EventHandler(this.Control_SizeChanged);
}
protected override void OnControlRemoved(ControlEventArgs e)
{
base.OnControlRemoved(e);
this.RearrangeControls(this, this.TileBorder);
e.Control.SizeChanged -= new EventHandler(this.Control_SizeChanged);
}
protected void RearrangeControls(Panel p, int border)
{
int num = border;
int num2 = border;
int num3 = 0;
bool flag = true;
foreach (Control control in p.Controls)
{
if (control != null)
{
num3 = ((control.Height > num3) ? control.Height : num3);
if (flag)
{
num += control.Width + border;
control.Location = new Point(border, border);
flag = false;
}
else
{
if (num + control.Width + 2 * border > p.Width)
{
num2 += num3 + border;
control.Location = new Point(border, num2);
num = border + (control.Width + border);
num3 = control.Height;
}
else
{
control.Location = new Point(num, num2);
num += control.Width + border;
}
}
}
}
}
private void Control_SizeChanged(object sender, EventArgs e)
{
this.RearrangeControls(this, this.TileBorder);
}
}
지금 내가 보는 것으로는 RearrangeControls 방법은 지금 나에게 약간 해킹 - 함께 - 인 - 어 - 서둘러 보이지 않는,하지만 난 당신이 더 좋은 만들 수있는 확신합니다!
기본 높이가 설정된 내부 패널에 문제가있었습니다. – Malcolm