* UIFlowLayoutPanel:增加水平滚动条

This commit is contained in:
Sunny 2020-10-02 09:10:01 +08:00
parent c90f6e4473
commit 4f71e8e490
7 changed files with 103 additions and 49 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -59,7 +59,7 @@
this.uiFlowLayoutPanel1.MinimumSize = new System.Drawing.Size(1, 1); this.uiFlowLayoutPanel1.MinimumSize = new System.Drawing.Size(1, 1);
this.uiFlowLayoutPanel1.Name = "uiFlowLayoutPanel1"; this.uiFlowLayoutPanel1.Name = "uiFlowLayoutPanel1";
this.uiFlowLayoutPanel1.Padding = new System.Windows.Forms.Padding(2); this.uiFlowLayoutPanel1.Padding = new System.Windows.Forms.Padding(2);
this.uiFlowLayoutPanel1.Size = new System.Drawing.Size(270, 390); this.uiFlowLayoutPanel1.Size = new System.Drawing.Size(249, 390);
this.uiFlowLayoutPanel1.TabIndex = 8; this.uiFlowLayoutPanel1.TabIndex = 8;
this.uiFlowLayoutPanel1.Text = "uiFlowLayoutPanel1"; this.uiFlowLayoutPanel1.Text = "uiFlowLayoutPanel1";
// //

View File

@ -20,6 +20,7 @@
******************************************************************************/ ******************************************************************************/
using System; using System;
using System.ComponentModel;
using System.Drawing; using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
@ -27,7 +28,8 @@ namespace Sunny.UI
{ {
public class UIFlowLayoutPanel : UIPanel public class UIFlowLayoutPanel : UIPanel
{ {
private UIVerScrollBarEx Bar; private UIVerScrollBarEx VBar;
private UIHorScrollBarEx HBar;
private FlowLayoutPanel flowLayoutPanel; private FlowLayoutPanel flowLayoutPanel;
public UIFlowLayoutPanel() public UIFlowLayoutPanel()
@ -37,16 +39,33 @@ namespace Sunny.UI
Panel.AutoScroll = true; Panel.AutoScroll = true;
Panel.ControlAdded += Panel_ControlAdded; Panel.ControlAdded += Panel_ControlAdded;
Panel.ControlRemoved += Panel_ControlRemoved; Panel.ControlRemoved += Panel_ControlRemoved;
//Panel.SizeChanged += Panel_SizeChanged;
Panel.Scroll += Panel_Scroll; Panel.Scroll += Panel_Scroll;
Panel.MouseWheel += Panel_MouseWheel; Panel.MouseWheel += Panel_MouseWheel;
Panel.MouseEnter += Panel_MouseEnter; Panel.MouseEnter += Panel_MouseEnter;
Panel.MouseClick += Panel_MouseClick; Panel.MouseClick += Panel_MouseClick;
Bar.ValueChanged += Bar_ValueChanged;
VBar.ValueChanged += VBar_ValueChanged;
HBar.ValueChanged += HBar_ValueChanged;
SizeChanged += Panel_SizeChanged; SizeChanged += Panel_SizeChanged;
} }
[DefaultValue(FlowDirection.LeftToRight)]
[Localizable(true)]
public FlowDirection FlowDirection
{
get => Panel.FlowDirection;
set => Panel.FlowDirection = value;
}
[DefaultValue(true)]
[Localizable(true)]
public bool WrapContents
{
get => Panel.WrapContents;
set => Panel.WrapContents = value;
}
public override void SetStyleColor(UIBaseStyle uiColor) public override void SetStyleColor(UIBaseStyle uiColor)
{ {
base.SetStyleColor(uiColor); base.SetStyleColor(uiColor);
@ -57,7 +76,8 @@ namespace Sunny.UI
{ {
base.AfterSetFillColor(color); base.AfterSetFillColor(color);
Panel.BackColor = color; Panel.BackColor = color;
Bar.FillColor = color; VBar.FillColor = color;
HBar.FillColor = color;
} }
public void AddControl(Control ctrl) public void AddControl(Control ctrl)
@ -67,11 +87,6 @@ namespace Sunny.UI
public void Clear() public void Clear()
{ {
foreach (Control control in Panel.Controls)
{
control.Dispose();
}
Panel.Controls.Clear(); Panel.Controls.Clear();
} }
@ -114,17 +129,22 @@ namespace Sunny.UI
Panel.VerticalScroll.Value = 0; Panel.VerticalScroll.Value = 0;
} }
Bar.Value = Panel.VerticalScroll.Value; VBar.Value = Panel.VerticalScroll.Value;
} }
private void Bar_ValueChanged(object sender, EventArgs e) private void VBar_ValueChanged(object sender, EventArgs e)
{ {
Panel.VerticalScroll.Value = Bar.Value; Panel.VerticalScroll.Value = VBar.Value;
}
private void HBar_ValueChanged(object sender, EventArgs e)
{
Panel.HorizontalScroll.Value = HBar.Value;
} }
private void Panel_Scroll(object sender, ScrollEventArgs e) private void Panel_Scroll(object sender, ScrollEventArgs e)
{ {
Bar.Value = Panel.VerticalScroll.Value; VBar.Value = Panel.VerticalScroll.Value;
} }
private void Panel_SizeChanged(object sender, EventArgs e) private void Panel_SizeChanged(object sender, EventArgs e)
@ -144,11 +164,19 @@ namespace Sunny.UI
private void SetScrollInfo() private void SetScrollInfo()
{ {
Bar.Visible = Panel.VerticalScroll.Visible; VBar.Visible = Panel.VerticalScroll.Visible;
Bar.Maximum = Panel.VerticalScroll.Maximum; VBar.Maximum = Panel.VerticalScroll.Maximum;
Bar.Value = Panel.VerticalScroll.Value; VBar.Value = Panel.VerticalScroll.Value;
Bar.LargeChange = Panel.VerticalScroll.LargeChange; VBar.LargeChange = Panel.VerticalScroll.LargeChange;
Bar.BoundsHeight = Panel.VerticalScroll.LargeChange; VBar.BoundsHeight = Panel.VerticalScroll.LargeChange;
HBar.Visible = Panel.HorizontalScroll.Visible;
HBar.Maximum = Panel.HorizontalScroll.Maximum;
HBar.Value = Panel.HorizontalScroll.Value;
HBar.LargeChange = Panel.HorizontalScroll.LargeChange;
HBar.BoundsWidth = Panel.HorizontalScroll.LargeChange;
SetScrollPos();
} }
public FlowLayoutPanel Panel => flowLayoutPanel; public FlowLayoutPanel Panel => flowLayoutPanel;
@ -156,7 +184,8 @@ namespace Sunny.UI
private void InitializeComponent() private void InitializeComponent()
{ {
this.flowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel(); this.flowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
this.Bar = new Sunny.UI.UIVerScrollBarEx(); this.VBar = new Sunny.UI.UIVerScrollBarEx();
this.HBar = new Sunny.UI.UIHorScrollBarEx();
this.SuspendLayout(); this.SuspendLayout();
// //
// flowLayoutPanel // flowLayoutPanel
@ -168,23 +197,40 @@ namespace Sunny.UI
this.flowLayoutPanel.Size = new System.Drawing.Size(429, 383); this.flowLayoutPanel.Size = new System.Drawing.Size(429, 383);
this.flowLayoutPanel.TabIndex = 0; this.flowLayoutPanel.TabIndex = 0;
// //
// Bar // VBar
// //
this.Bar.BoundsHeight = 10; this.VBar.BoundsHeight = 10;
this.Bar.Font = new System.Drawing.Font("微软雅黑", 12F); this.VBar.Font = new System.Drawing.Font("微软雅黑", 12F);
this.Bar.LargeChange = 10; this.VBar.LargeChange = 10;
this.Bar.Location = new System.Drawing.Point(410, 5); this.VBar.Location = new System.Drawing.Point(410, 5);
this.Bar.Maximum = 100; this.VBar.Maximum = 100;
this.Bar.MinimumSize = new System.Drawing.Size(1, 1); this.VBar.MinimumSize = new System.Drawing.Size(1, 1);
this.Bar.Name = "Bar"; this.VBar.Name = "VBar";
this.Bar.Size = new System.Drawing.Size(18, 377); this.VBar.Size = new System.Drawing.Size(18, 377);
this.Bar.TabIndex = 1; this.VBar.TabIndex = 1;
this.Bar.Text = "uiVerScrollBarEx1"; this.VBar.Text = "uiVerScrollBarEx1";
this.Bar.Value = 0; this.VBar.Value = 0;
this.VBar.Visible = false;
//
// HBar
//
this.HBar.BoundsWidth = 10;
this.HBar.Font = new System.Drawing.Font("微软雅黑", 12F);
this.HBar.LargeChange = 10;
this.HBar.Location = new System.Drawing.Point(5, 364);
this.HBar.Maximum = 100;
this.HBar.MinimumSize = new System.Drawing.Size(1, 1);
this.HBar.Name = "HBar";
this.HBar.Size = new System.Drawing.Size(399, 18);
this.HBar.TabIndex = 2;
this.HBar.Text = "uiHorScrollBarEx1";
this.HBar.Value = 0;
this.HBar.Visible = false;
// //
// UIFlowLayoutPanel // UIFlowLayoutPanel
// //
this.Controls.Add(this.Bar); this.Controls.Add(this.HBar);
this.Controls.Add(this.VBar);
this.Controls.Add(this.flowLayoutPanel); this.Controls.Add(this.flowLayoutPanel);
this.Name = "UIFlowLayoutPanel"; this.Name = "UIFlowLayoutPanel";
this.Padding = new System.Windows.Forms.Padding(2); this.Padding = new System.Windows.Forms.Padding(2);
@ -196,22 +242,30 @@ namespace Sunny.UI
protected override void OnSizeChanged(EventArgs e) protected override void OnSizeChanged(EventArgs e)
{ {
base.OnSizeChanged(e); base.OnSizeChanged(e);
SetScrollPos();
}
if (Bar != null) private void SetScrollPos()
{
if (VBar != null && HBar != null)
{ {
int added = 1;
if (RadiusSides != UICornerRadiusSides.None) if (RadiusSides != UICornerRadiusSides.None)
{ {
int added = Radius / 2; added = Radius / 2;
Bar.Left = Width - Bar.Width - added;
Bar.Top = added;
Bar.Height = Height - added * 2;
} }
VBar.Left = Width - VBar.Width - added;
VBar.Top = added;
VBar.Height = Height - added * 2;
HBar.Left = added;
HBar.Top = Height - HBar.Height - added;
if (VBar.Visible)
HBar.Width = VBar.Left - 1 - added;
else else
{ HBar.Width = Width - added * 2;
Bar.Left = Width - Bar.Width - 1;
Bar.Top = 1;
Bar.Height = Height - 2;
}
} }
} }
} }

View File

@ -42,7 +42,7 @@ namespace Sunny.UI
fillPressColor = Color.FromArgb(74, 131, 229); fillPressColor = Color.FromArgb(74, 131, 229);
} }
public int maximum = 100; private int maximum = 100;
public int Maximum public int Maximum
{ {
get => maximum; get => maximum;
@ -55,7 +55,7 @@ namespace Sunny.UI
public int LargeChange { get; set; } = 10; public int LargeChange { get; set; } = 10;
public int thisValue; private int thisValue;
public event EventHandler ValueChanged; public event EventHandler ValueChanged;
public int Value public int Value
@ -69,7 +69,7 @@ namespace Sunny.UI
} }
} }
public int boundsWidth = 10; private int boundsWidth = 10;
public int BoundsWidth public int BoundsWidth
{ {
get => boundsWidth; get => boundsWidth;

View File

@ -42,7 +42,7 @@ namespace Sunny.UI
fillPressColor = Color.FromArgb(74, 131, 229); fillPressColor = Color.FromArgb(74, 131, 229);
} }
public int maximum = 100; private int maximum = 100;
public int Maximum public int Maximum
{ {
get => maximum; get => maximum;
@ -55,7 +55,7 @@ namespace Sunny.UI
public int LargeChange { get; set; } = 10; public int LargeChange { get; set; } = 10;
public int thisValue; private int thisValue;
public event EventHandler ValueChanged; public event EventHandler ValueChanged;
public int Value public int Value
@ -69,7 +69,7 @@ namespace Sunny.UI
} }
} }
public int boundsHeight = 10; private int boundsHeight = 10;
public int BoundsHeight public int BoundsHeight
{ {
get => boundsHeight; get => boundsHeight;