namespace RyzStudio.Windows.ThemedForms { using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; public partial class Form : System.Windows.Forms.Form { protected Color topFillColour = Color.FromArgb(15, 15, 15); protected int topFillHeight = 52; protected Color bottomFillColour = Color.FromArgb(15, 15, 15); protected int bottomFillMargin = 19; protected int borderWidth = 1; public Form() { this.InitializeComponent(); this.BackColor = Color.FromArgb(246, 246, 246); } protected override void OnResize(EventArgs e) { base.OnResize(e); this.Invalidate(); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics g = e.Graphics; Rectangle areaTop = new Rectangle(this.DisplayRectangle.Left, this.Padding.Top, this.DisplayRectangle.Width, topFillHeight); Rectangle areaBottom = new Rectangle(this.DisplayRectangle.Left, (this.DisplayRectangle.Height - bottomFillMargin), this.DisplayRectangle.Width, bottomFillMargin); Rectangle areaBorder = new Rectangle(this.ClientRectangle.X, this.ClientRectangle.Y, this.ClientRectangle.Width - borderWidth, this.ClientRectangle.Height - borderWidth); // draw header if (topFillHeight > 0) { g.FillRectangle(new SolidBrush(topFillColour), areaTop); } // draw footer if (bottomFillMargin > 0) { g.FillRectangle(new SolidBrush(bottomFillColour), areaBottom); } // draw logo if (this.TitleLogo != null) { g.DrawImageUnscaled(this.TitleLogo, this.Padding.Left, this.Padding.Top); } if (this.Banner != null) { g.DrawImageUnscaled(this.Banner, this.Padding.Left, (this.DisplayRectangle.Height - this.Banner.Height - bottomFillMargin), (this.DisplayRectangle.Width - (this.Padding.Left + this.Padding.Right)), this.Banner.Height); } g.DrawRectangle(new Pen(Color.Black, borderWidth), areaBorder); } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public new Color BackColor { get => base.BackColor; set { base.BackColor = value; } } [Category("Appearance"), Browsable(true)] public Image TitleLogo { get; set; } [Category("Appearance"), Browsable(true)] public Image Banner { get; set; } public void SetValue(Label sender, string value) { if (sender.InvokeRequired) { sender.Invoke(new MethodInvoker(() => { sender.Text = value; })); } else { sender.Text = value; } } public void SetValue(GroupBox sender, string value) { if (sender.InvokeRequired) { sender.Invoke(new MethodInvoker(() => { sender.Text = value; })); } else { sender.Text = value; } } public void AddValue(ListBox sender, string value) { if (sender.InvokeRequired) { sender.Invoke(new MethodInvoker(() => { sender.Items.Add(value); })); } else { sender.Items.Add(value); } } public void ClearValues(ListBox sender) { if (sender.InvokeRequired) { sender.Invoke(new MethodInvoker(() => { sender.Items.Clear(); })); } else { sender.Items.Clear(); } } public string GetValue(ListBox sender) { string rv = string.Empty; if (sender.InvokeRequired) { sender.Invoke(new MethodInvoker(() => { rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString(); })); } else { rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString(); } return rv; } public string GetValue(TextBox sender) { string rv = string.Empty; if (sender.InvokeRequired) { sender.Invoke(new MethodInvoker(() => { rv = sender.Text.Trim(); })); } else { rv = sender.Text.Trim(); } return rv; } public int GetValue(NumericUpDown sender) { int rv = 0; if (sender.InvokeRequired) { sender.Invoke(new MethodInvoker(() => { rv = (int)sender.Value; })); } else { rv = (int)sender.Value; } return rv; } } }