mirror of
https://github.com/colhountech/DarkUI.Net5.git
synced 2025-07-02 07:09:27 +03:00
146 lines
3.8 KiB
C#
146 lines
3.8 KiB
C#
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
namespace DarkUI
|
|
{
|
|
public class DarkSectionPanel : Panel
|
|
{
|
|
#region Field Region
|
|
|
|
private string _sectionHeader;
|
|
|
|
#endregion
|
|
|
|
#region Property Region
|
|
|
|
[Browsable(false)]
|
|
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
|
public new Padding Padding
|
|
{
|
|
get { return base.Padding; }
|
|
}
|
|
|
|
[Category("Appearance")]
|
|
[Description("The section header text associated with this control.")]
|
|
public string SectionHeader
|
|
{
|
|
get { return _sectionHeader; }
|
|
set
|
|
{
|
|
_sectionHeader = value;
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Constructor Region
|
|
|
|
public DarkSectionPanel()
|
|
{
|
|
SetStyle(ControlStyles.OptimizedDoubleBuffer |
|
|
ControlStyles.ResizeRedraw |
|
|
ControlStyles.UserPaint, true);
|
|
|
|
base.Padding = new Padding(1, 25, 1, 1);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Event Handler Region
|
|
|
|
protected override void OnEnter(System.EventArgs e)
|
|
{
|
|
base.OnEnter(e);
|
|
|
|
Invalidate();
|
|
}
|
|
|
|
protected override void OnLeave(System.EventArgs e)
|
|
{
|
|
base.OnLeave(e);
|
|
|
|
Invalidate();
|
|
}
|
|
|
|
protected override void OnMouseDown(MouseEventArgs e)
|
|
{
|
|
base.OnMouseDown(e);
|
|
|
|
if (Controls.Count > 0)
|
|
Controls[0].Focus();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Paint Region
|
|
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
var g = e.Graphics;
|
|
var rect = ClientRectangle;
|
|
|
|
// Fill body
|
|
using (var b = new SolidBrush(Colors.GreyBackground))
|
|
{
|
|
g.FillRectangle(b, rect);
|
|
}
|
|
|
|
// Draw header
|
|
var bgColor = ContainsFocus ? Colors.BlueBackground : Colors.HeaderBackground;
|
|
var darkColor = ContainsFocus ? Colors.DarkBlueBorder : Colors.DarkBorder;
|
|
var lightColor = ContainsFocus ? Colors.LightBlueBorder : Colors.LightBorder;
|
|
|
|
using (var b = new SolidBrush(bgColor))
|
|
{
|
|
var bgRect = new Rectangle(0, 0, rect.Width, 25);
|
|
g.FillRectangle(b, bgRect);
|
|
}
|
|
|
|
using (var p = new Pen(darkColor))
|
|
{
|
|
g.DrawLine(p, rect.Left, 0, rect.Right, 0);
|
|
g.DrawLine(p, rect.Left, 25 - 1, rect.Right, 25 - 1);
|
|
}
|
|
|
|
using (var p = new Pen(lightColor))
|
|
{
|
|
g.DrawLine(p, rect.Left, 1, rect.Right, 1);
|
|
}
|
|
|
|
var xOffset = 3;
|
|
|
|
using (var b = new SolidBrush(Colors.LightText))
|
|
{
|
|
var textRect = new Rectangle(xOffset, 0, rect.Width - 4 - xOffset, 25);
|
|
|
|
var format = new StringFormat
|
|
{
|
|
Alignment = StringAlignment.Near,
|
|
LineAlignment = StringAlignment.Center,
|
|
FormatFlags = StringFormatFlags.NoWrap,
|
|
Trimming = StringTrimming.EllipsisCharacter
|
|
};
|
|
|
|
g.DrawString(SectionHeader, Font, b, textRect, format);
|
|
}
|
|
|
|
// Draw border
|
|
using (var p = new Pen(Colors.DarkBorder, 1))
|
|
{
|
|
var modRect = new Rectangle(rect.Left, rect.Top, rect.Width - 1, rect.Height - 1);
|
|
|
|
g.DrawRectangle(p, modRect);
|
|
}
|
|
}
|
|
|
|
protected override void OnPaintBackground(PaintEventArgs e)
|
|
{
|
|
// Absorb event
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|