Create two classes inside one class File.
- Create new class file and give the name as AnimtedMsgBox and inherit this class with Form class, as shown below.
- class AnimtedMsgBox :Form{}
Or
Add WindowsForm and give the name as RNTP_MsgBox.cs
Change the class name, if you want, as given above.
- Add two references to this class.
- using System.Text.RegularExpressions;
- using System.Runtime.InteropServices;
- Declare the variables inside the class, as shown below.
- private const int CS_DROPSHADOW = 0x00020000;
- private static AnimtedMsgBox _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;
- private static Point lastMousePos;
-
- [DllImport("user32.dll", CharSet = CharSet.Auto)]
- private static extern bool MessageBeep(uint type);
- Add the function given below to this class.
- private AnimtedMsgBox() {
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
- this.BackColor = Color.FromArgb(45, 45, 48);
- this.StartPosition = FormStartPosition.CenterScreen;
- this.Padding = new System.Windows.Forms.Padding(3);
- this.Width = 200;
-
- _lblTitle = new Label();
- _lblTitle.ForeColor = Color.White;
- _lblTitle.Font = new System.Drawing.Font("Segoe UI", 18);
- _lblTitle.Dock = DockStyle.Top;
- _lblTitle.Height = 50;
-
- _lblMessage = new Label();
- _lblMessage.ForeColor = Color.White;
- _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(37, 37, 38);
- _plFooter.Height = 75;
- _plFooter.Controls.Add(_flpButtons);
-
- _picIcon.Width = 32;
- _picIcon.Height = 32;
- _picIcon.Location = new Point(30, 50);
-
- _plIcon.Dock = DockStyle.Left;
- _plIcon.Padding = new Padding(20);
- _plIcon.Width = 70;
- _plIcon.Controls.Add(_picIcon);
-
- List < Control > controlCollection = new List < Control > ();
- controlCollection.Add(this);
- controlCollection.Add(_lblTitle);
- controlCollection.Add(_lblMessage);
- controlCollection.Add(_flpButtons);
- controlCollection.Add(_plHeader);
- controlCollection.Add(_plFooter);
- controlCollection.Add(_plIcon);
- controlCollection.Add(_picIcon);
-
- foreach(Control control in controlCollection) {
- control.MouseDown += AnimtedMsgBox_MouseDown;
- control.MouseMove += AnimtedMsgBox_MouseMove;
- }
-
- this.Controls.Add(_plHeader);
- this.Controls.Add(_plIcon);
- this.Controls.Add(_plFooter);
- }
-
- private static void AnimtedMsgBox_MouseDown(object sender, MouseEventArgs e) {
- if (e.Button == MouseButtons.Left) {
- lastMousePos = new Point(e.X, e.Y);
- }
- }
-
-
- private static void AnimtedMsgBox_MouseMove(object sender, MouseEventArgs e) {
- if (e.Button == MouseButtons.Left) {
- _msgBox.Left += e.X - lastMousePos.X;
- _msgBox.Top += e.Y - lastMousePos.Y;
- }
- }
-
- public static DialogResult Show(string message) {
- _msgBox = new AnimtedMsgBox();
- _msgBox._lblMessage.Text = message;
-
- AnimtedMsgBox.InitButtons(Buttons.OK);
-
- _msgBox.ShowDialog();
- MessageBeep(0);
- return _buttonResult;
- }
-
- public static DialogResult Show(string message, string title) {
- _msgBox = new AnimtedMsgBox();
- _msgBox._lblMessage.Text = message;
- _msgBox._lblTitle.Text = title;
- _msgBox.Size = AnimtedMsgBox.MessageSize(message);
-
- AnimtedMsgBox.InitButtons(Buttons.OK);
-
- _msgBox.ShowDialog();
- MessageBeep(0);
- return _buttonResult;
- }
-
- public static DialogResult Show(string message, string title, Buttons buttons) {
- _msgBox = new AnimtedMsgBox();
- _msgBox._lblMessage.Text = message;
- _msgBox._lblTitle.Text = title;
- _msgBox._plIcon.Hide();
-
- AnimtedMsgBox.InitButtons(buttons);
-
- _msgBox.Size = AnimtedMsgBox.MessageSize(message);
- _msgBox.ShowDialog();
- MessageBeep(0);
- return _buttonResult;
- }
-
- public static DialogResult Show(string message, string title, Buttons buttons, Icon icon) {
- _msgBox = new AnimtedMsgBox();
- _msgBox._lblMessage.Text = message;
- _msgBox._lblTitle.Text = title;
-
- AnimtedMsgBox.InitButtons(buttons);
- AnimtedMsgBox.InitIcon(icon);
-
- _msgBox.Size = AnimtedMsgBox.MessageSize(message);
- _msgBox.ShowDialog();
- MessageBeep(0);
- return _buttonResult;
- }
-
- public static DialogResult Show(string message, string title, Buttons buttons, Icon icon, AnimateStyle style) {
- _msgBox = new AnimtedMsgBox();
- _msgBox._lblMessage.Text = message;
- _msgBox._lblTitle.Text = title;
- _msgBox.Height = 0;
-
- AnimtedMsgBox.InitButtons(buttons);
- AnimtedMsgBox.InitIcon(icon);
-
- _timer = new Timer();
- Size formSize = AnimtedMsgBox.MessageSize(message);
-
- switch (style) {
- case AnimtedMsgBox.AnimateStyle.SlideDown:
- _msgBox.Size = new Size(formSize.Width, 0);
- _timer.Interval = 1;
- _timer.Tag = new ApplyAnimation(formSize, style);
- break;
-
- case AnimtedMsgBox.AnimateStyle.FadeIn:
- _msgBox.Size = formSize;
- _msgBox.Opacity = 0;
- _timer.Interval = 20;
- _timer.Tag = new ApplyAnimation(formSize, style);
- break;
-
- case AnimtedMsgBox.AnimateStyle.ZoomIn:
- _msgBox.Size = new Size(formSize.Width + 100, formSize.Height + 100);
- _timer.Tag = new ApplyAnimation(formSize, style);
- _timer.Interval = 1;
- break;
- }
-
- _timer.Tick += timer_Tick;
- _timer.Start();
-
- _msgBox.ShowDialog();
- MessageBeep(0);
- return _buttonResult;
- }
-
- static void timer_Tick(object sender, EventArgs e) {
- Timer timer = (Timer) sender;
- ApplyAnimation animate = (ApplyAnimation) timer.Tag;
-
- switch (animate.Style) {
- case AnimtedMsgBox.AnimateStyle.SlideDown:
- if (_msgBox.Height < animate.FormSize.Height) {
- _msgBox.Height += 17;
- _msgBox.Invalidate();
- } else {
- _timer.Stop();
- _timer.Dispose();
- }
- break;
-
- case AnimtedMsgBox.AnimateStyle.FadeIn:
- if (_msgBox.Opacity < 1) {
- _msgBox.Opacity += 0.1;
- _msgBox.Invalidate();
- } else {
- _timer.Stop();
- _timer.Dispose();
- }
- break;
-
- case AnimtedMsgBox.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 AnimtedMsgBox.Buttons.AbortRetryIgnore:
- _msgBox.InitAbortRetryIgnoreButtons();
- break;
-
- case AnimtedMsgBox.Buttons.OK:
- _msgBox.InitOKButton();
- break;
-
- case AnimtedMsgBox.Buttons.OKCancel:
- _msgBox.InitOKCancelButtons();
- break;
-
- case AnimtedMsgBox.Buttons.RetryCancel:
- _msgBox.InitRetryCancelButtons();
- break;
-
- case AnimtedMsgBox.Buttons.YesNo:
- _msgBox.InitYesNoButtons();
- break;
-
- case AnimtedMsgBox.Buttons.YesNoCancel:
- _msgBox.InitYesNoCancelButtons();
- break;
- }
-
- foreach(Button btn in _msgBox._buttonCollection) {
- btn.ForeColor = Color.FromArgb(170, 170, 170);
- 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);
- btn.Cursor = Cursors.Hand;
- _msgBox._flpButtons.Controls.Add(btn);
- }
- }
-
- private static void InitIcon(Icon icon) {
- switch (icon) {
- case AnimtedMsgBox.Icon.Application:
- _msgBox._picIcon.Image = SystemIcons.Application.ToBitmap();
- break;
-
- case AnimtedMsgBox.Icon.Exclamation:
- _msgBox._picIcon.Image = SystemIcons.Exclamation.ToBitmap();
- break;
-
- case AnimtedMsgBox.Icon.Error:
- _msgBox._picIcon.Image = SystemIcons.Error.ToBitmap();
- break;
-
- case AnimtedMsgBox.Icon.Info:
- _msgBox._picIcon.Image = SystemIcons.Information.ToBitmap();
- break;
-
- case AnimtedMsgBox.Icon.Question:
- _msgBox._picIcon.Image = SystemIcons.Question.ToBitmap();
- break;
-
- case AnimtedMsgBox.Icon.Shield:
- _msgBox._picIcon.Image = SystemIcons.Shield.ToBitmap();
- break;
-
- case AnimtedMsgBox.Icon.Warning:
- _msgBox._picIcon.Image = SystemIcons.Warning.ToBitmap();
- 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;
- width = 490;
- height += (int)(size.Height) * 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
- }
- Add one more class to this Class file or make separate class, as shown below.
- class ApplyAnimation
- {
- public Size FormSize;
- public AnimtedMsgBox.AnimateStyle Style;
-
- public ApplyAnimation(Size formSize, AnimtedMsgBox.AnimateStyle style)
- {
- this.FormSize = formSize;
- this.Style = style;
- }
- }
Your customized message box is ready. Now, let's see how to use it.
To use this customized message box, follow the steps given below.
- Open new or existing Windows form and give the reference to this class. In my example, the reference is given below.
- Add the button and write the message box code to button click event or any event, as shown below,
- AnimtedMsgBox.Show("Customized messagebox FadeIn", "title", AnimtedMsgBox.Buttons.OK, AnimtedMsgBox.Icon.Application, AnimtedMsgBox.AnimateStyle.FadeIn);
Note
There are three animations for this customized message box,
AnimtedMsgBox.AnimateStyle.FadeIn
AnimtedMsgBox.AnimateStyle.SlideDown
AnimtedMsgBox.AnimateStyle.ZoomIn
There are new extra icon also avilable for this customized messagebox,
AnimtedMsgBox.Icon.Application
AnimtedMsgBox.Icon.Shield
AnimtedMsgBox.Icon.Search