Good day,
I am trying to add a shadow to a borderless form in my application, but it is not showing and I cannot seem to figure out why.
This code is working fine in another project of mine, but I cannot figure out what the difference is. Could anyone please assist?
This is the code that is not working:
using MyGym_Manager.Classes;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyGym_Manager.Views.Edit
{
public partial class EditGymFees : Form
{
CustomUIControls _customControls = new CustomUIControls();
private const int CS_DROPSHADOW = 0x00020000;
public EditGymFees()
{
InitializeComponent();
#region CustomControls
txtType.Enter += new EventHandler(_customControls.TextBox_Enter);
txtType.Leave += new EventHandler(_customControls.TextBox_Leave);
txtAmount.Enter += new EventHandler(_customControls.TextBox_Enter);
txtAmount.Leave += new EventHandler(_customControls.TextBox_Leave);
#endregion
}
private void btnCloseWindow_Click(object sender, EventArgs e)
{
this.Close();
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}
}
}
This is the code for the working form. It is just a custom messagebox that is generated through code and nothing is done in the designer.
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;
using Minc_SMS_Console.Properties;
namespace xDialog
{
public partial class MsgBox : Form
{
private const int CS_DROPSHADOW = 0x00020000;
private static MsgBox _msgBox;
private Panel _plHeader = new Panel();
private Panel _plFooter = new Panel();
private Panel _plIcon = new Panel();
private PictureBox _picIcon = new PictureBox();
private FlowLayoutPanel _flpButtons = new FlowLayoutPanel();
private Label _lblTitle;
private Label _lblMessage;
private List<Button> _buttonCollection = new List<Button>();
private static DialogResult _buttonResult = new DialogResult();
private static Timer _timer;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool MessageBeep(uint type);
private MsgBox()
{
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.BackColor = Color.FromArgb(255, 255, 255);
this.StartPosition = FormStartPosition.CenterScreen;
this.Padding = new System.Windows.Forms.Padding(3);
this.Width = 400;
this.ShowInTaskbar = false;
_lblTitle = new Label();
_lblTitle.ForeColor = SystemColors.ControlDark;
_lblTitle.Font = new System.Drawing.Font("Segoe UI", 16);
_lblTitle.Dock = DockStyle.Top;
_lblTitle.Height = 50;
_lblMessage = new Label();
_lblMessage.ForeColor = SystemColors.ControlDark;
_lblMessage.Font = new System.Drawing.Font("Segoe UI", 10);
_lblMessage.Dock = DockStyle.Fill;
_flpButtons.FlowDirection = FlowDirection.RightToLeft;
_flpButtons.Dock = DockStyle.Fill;
_plHeader.Dock = DockStyle.Fill;
_plHeader.Padding = new Padding(20);
_plHeader.Controls.Add(_lblMessage);
_plHeader.Controls.Add(_lblTitle);
_plFooter.Dock = DockStyle.Bottom;
_plFooter.Padding = new Padding(20);
_plFooter.BackColor = Color.FromArgb(233, 233, 233);
_plFooter.Height = 80;
_plFooter.Controls.Add(_flpButtons);
_picIcon.Width = 48;
_picIcon.Height = 48;
_picIcon.Location = new Point(20, 50);
_plIcon.Dock = DockStyle.Left;
_plIcon.Padding = new Padding(20);
_plIcon.Width = 70;
_plIcon.Controls.Add(_picIcon);
this.Controls.Add(_plHeader);
this.Controls.Add(_plIcon);
this.Controls.Add(_plFooter);
}
public static void Show(string message)
{
_msgBox = new MsgBox();
_msgBox._lblMessage.Text = message;
_msgBox.ShowDialog();
MessageBeep(0);
}
public static void Show(string message, string title)
{
_msgBox = new MsgBox();
_msgBox._lblMessage.Text = message;
_msgBox._lblTitle.Text = title;
_msgBox.Size = MsgBox.MessageSize(message);
_msgBox.ShowDialog();
MessageBeep(0);
}
public static DialogResult Show(string message, string title, Buttons buttons)
{
_msgBox = new MsgBox();
_msgBox._lblMessage.Text = message;
_msgBox._lblTitle.Text = title;
_msgBox._plIcon.Hide();
MsgBox.InitButtons(buttons);
_msgBox.Size = MsgBox.MessageSize(message);
_msgBox.ShowDialog();
MessageBeep(0);
return _buttonResult;
}
public static DialogResult Show(string message, string title, Buttons buttons, Icon icon)
{
_msgBox = new MsgBox();
_msgBox._lblMessage.Text = message;
_msgBox._lblTitle.Text = title;
MsgBox.InitButtons(buttons);
MsgBox.InitIcon(icon);
_msgBox.Size = MsgBox.MessageSize(message);
_msgBox.ShowDialog();
MessageBeep(0);
return _buttonResult;
}
public static DialogResult Show(string message, string title, Buttons buttons, Icon icon, AnimateStyle style, Form owner)
{
_msgBox = new MsgBox();
_msgBox._lblMessage.Text = message;
_msgBox._lblTitle.Text = title;
_msgBox.Height = 0;
MsgBox.InitButtons(buttons);
MsgBox.InitIcon(icon);
_timer = new Timer();
Size formSize = MsgBox.MessageSize(message);
switch (style)
{
case MsgBox.AnimateStyle.SlideDown:
_msgBox.Size = new Size(formSize.Width, 0);
_timer.Interval = 1;
_timer.Tag = new AnimateMsgBox(formSize, style);
break;
case MsgBox.AnimateStyle.FadeIn:
_msgBox.Size = formSize;
_msgBox.Opacity = 0;
_timer.Interval = 20;
_timer.Tag = new AnimateMsgBox(formSize, style);
break;
case MsgBox.AnimateStyle.ZoomIn:
_msgBox.Size = new Size(formSize.Width + 100, formSize.Height + 100);
_timer.Tag = new AnimateMsgBox(formSize, style);
_timer.Interval = 1;
break;
}
_timer.Tick += timer_Tick;
_timer.Start();
_msgBox.ShowDialog(owner);
MessageBeep(0);
return _buttonResult;
}
static void timer_Tick(object sender, EventArgs e)
{
Timer timer = (Timer)sender;
AnimateMsgBox animate = (AnimateMsgBox)timer.Tag;
switch (animate.Style)
{
case MsgBox.AnimateStyle.SlideDown:
if (_msgBox.Height < animate.FormSize.Height)
{
_msgBox.Height += 17;
_msgBox.Invalidate();
}
else
{
_timer.Stop();
_timer.Dispose();
}
break;
case MsgBox.AnimateStyle.FadeIn:
if (_msgBox.Opacity < 1)
{
_msgBox.Opacity += 0.1;
_msgBox.Invalidate();
}
else
{
_timer.Stop();
_timer.Dispose();
}
break;
case MsgBox.AnimateStyle.ZoomIn:
if (_msgBox.Width > animate.FormSize.Width)
{
_msgBox.Width -= 17;
_msgBox.Invalidate();
}
if (_msgBox.Height > animate.FormSize.Height)
{
_msgBox.Height -= 17;
_msgBox.Invalidate();
}
break;
}
}
private static void InitButtons(Buttons buttons)
{
switch (buttons)
{
case MsgBox.Buttons.AbortRetryIgnore:
_msgBox.InitAbortRetryIgnoreButtons();
break;
case MsgBox.Buttons.OK:
_msgBox.InitOKButton();
break;
case MsgBox.Buttons.OKCancel:
_msgBox.InitOKCancelButtons();
break;
case MsgBox.Buttons.RetryCancel:
_msgBox.InitRetryCancelButtons();
break;
case MsgBox.Buttons.YesNo:
_msgBox.InitYesNoButtons();
break;
case MsgBox.Buttons.YesNoCancel:
_msgBox.InitYesNoCancelButtons();
break;
}
foreach (Button btn in _msgBox._buttonCollection)
{
btn.ForeColor = Color.FromArgb(0, 174, 255);
btn.Font = new System.Drawing.Font("Segoe UI", 8);
btn.Padding = new Padding(3);
btn.FlatStyle = FlatStyle.Flat;
btn.Height = 30;
btn.FlatAppearance.BorderColor = Color.FromArgb(99, 99, 98);
_msgBox._flpButtons.Controls.Add(btn);
}
}
private static void InitIcon(Icon icon)
{
switch (icon)
{
case MsgBox.Icon.Application:
_msgBox._picIcon.Image = SystemIcons.Application.ToBitmap();
break;
case MsgBox.Icon.Exclamation:
_msgBox._picIcon.Image = Resources.Exclamation;
break;
case MsgBox.Icon.Error:
_msgBox._picIcon.Image = Resources.Error;
break;
case MsgBox.Icon.Info:
_msgBox._picIcon.Image = Resources.Info;
break;
case MsgBox.Icon.Question:
_msgBox._picIcon.Image = Resources.Question;
break;
case MsgBox.Icon.Shield:
_msgBox._picIcon.Image = SystemIcons.Shield.ToBitmap();
break;
case MsgBox.Icon.Warning:
_msgBox._picIcon.Image = Resources.Warning;
break;
}
}
private void InitAbortRetryIgnoreButtons()
{
Button btnAbort = new Button();
btnAbort.Text = "Abort";
btnAbort.Click += ButtonClick;
Button btnRetry = new Button();
btnRetry.Text = "Retry";
btnRetry.Click += ButtonClick;
Button btnIgnore = new Button();
btnIgnore.Text = "Ignore";
btnIgnore.Click += ButtonClick;
this._buttonCollection.Add(btnAbort);
this._buttonCollection.Add(btnRetry);
this._buttonCollection.Add(btnIgnore);
}
private void InitOKButton()
{
Button btnOK = new Button();
btnOK.Text = "OK";
btnOK.Click += ButtonClick;
this._buttonCollection.Add(btnOK);
}
private void InitOKCancelButtons()
{
Button btnOK = new Button();
btnOK.Text = "OK";
btnOK.Click += ButtonClick;
Button btnCancel = new Button();
btnCancel.Text = "Cancel";
btnCancel.Click += ButtonClick;
this._buttonCollection.Add(btnOK);
this._buttonCollection.Add(btnCancel);
}
private void InitRetryCancelButtons()
{
Button btnRetry = new Button();
btnRetry.Text = "OK";
btnRetry.Click += ButtonClick;
Button btnCancel = new Button();
btnCancel.Text = "Cancel";
btnCancel.Click += ButtonClick;
this._buttonCollection.Add(btnRetry);
this._buttonCollection.Add(btnCancel);
}
private void InitYesNoButtons()
{
Button btnYes = new Button();
btnYes.Text = "Yes";
btnYes.Click += ButtonClick;
Button btnNo = new Button();
btnNo.Text = "No";
btnNo.Click += ButtonClick;
this._buttonCollection.Add(btnYes);
this._buttonCollection.Add(btnNo);
}
private void InitYesNoCancelButtons()
{
Button btnYes = new Button();
btnYes.Text = "Abort";
btnYes.Click += ButtonClick;
Button btnNo = new Button();
btnNo.Text = "Retry";
btnNo.Click += ButtonClick;
Button btnCancel = new Button();
btnCancel.Text = "Cancel";
btnCancel.Click += ButtonClick;
this._buttonCollection.Add(btnYes);
this._buttonCollection.Add(btnNo);
this._buttonCollection.Add(btnCancel);
}
private static void ButtonClick(object sender, EventArgs e)
{
Button btn = (Button)sender;
switch (btn.Text)
{
case "Abort":
_buttonResult = DialogResult.Abort;
break;
case "Retry":
_buttonResult = DialogResult.Retry;
break;
case "Ignore":
_buttonResult = DialogResult.Ignore;
break;
case "OK":
_buttonResult = DialogResult.OK;
break;
case "Cancel":
_buttonResult = DialogResult.Cancel;
break;
case "Yes":
_buttonResult = DialogResult.Yes;
break;
case "No":
_buttonResult = DialogResult.No;
break;
}
_msgBox.Dispose();
}
private static Size MessageSize(string message)
{
Graphics g = _msgBox.CreateGraphics();
int width = 350;
int height = 230;
SizeF size = g.MeasureString(message, new System.Drawing.Font("Segoe UI", 10));
if (message.Length < 150)
{
if ((int)size.Width > 350)
{
width = (int)size.Width;
}
}
else
{
string[] groups = (from Match m in Regex.Matches(message, ".{1,180}") select m.Value).ToArray();
int lines = groups.Length + 1;
width = 700;
height += (int)(size.Height + 10) * lines;
}
return new Size(width, height);
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
Rectangle rect = new Rectangle(new Point(0, 0), new Size(this.Width - 1, this.Height - 1));
Pen pen = new Pen(Color.FromArgb(0, 151, 251));
g.DrawRectangle(pen, rect);
}
public enum Buttons
{
AbortRetryIgnore = 1,
OK = 2,
OKCancel = 3,
RetryCancel = 4,
YesNo = 5,
YesNoCancel = 6
}
public enum Icon
{
Application = 1,
Exclamation = 2,
Error = 3,
Warning = 4,
Info = 5,
Question = 6,
Shield = 7,
Search = 8
}
public enum AnimateStyle
{
SlideDown = 1,
FadeIn = 2,
ZoomIn = 3
}
}
class AnimateMsgBox
{
public Size FormSize;
public MsgBox.AnimateStyle Style;
public AnimateMsgBox(Size formSize, MsgBox.AnimateStyle style)
{
this.FormSize = formSize;
this.Style = style;
}
}
}
Please assist. Without the shadow, the forms are not displaying beautifully when overlapping.
Regards,
Chris