Files
Scanbox/ScanBox/FormMessageBox.cs
2026-02-09 15:37:45 -06:00

301 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ScaBox30.Private
{
public partial class FormMessageBox : Form
{
//Fields
//private Color primaryColor = Color.CornflowerBlue;
private Color primaryColor = Globals.primaryColor;
//private int borderSize = 2;
//Properties
public Color PrimaryColor
{
get { return primaryColor; }
set
{
primaryColor = value;
this.BackColor = primaryColor;//Form Border Color
this.panelTitleBar.BackColor = PrimaryColor;//Title Bar Back Color
}
}
//Constructors
public FormMessageBox(string text)
{
InitializeComponent();
InitializeItems();
this.PrimaryColor = primaryColor;
this.labelMessage.Text = text;
this.labelCaption.Text = "";
SetFormSize();
SetButtons(MessageBoxButtons.OK, MessageBoxDefaultButton.Button1);//Set Default Buttons
}
public FormMessageBox(string text, string caption)
{
InitializeComponent();
InitializeItems();
this.PrimaryColor = primaryColor;
this.labelMessage.Text = text;
this.labelCaption.Text = caption;
SetFormSize();
SetButtons(MessageBoxButtons.OK, MessageBoxDefaultButton.Button1);//Set Default Buttons
}
public FormMessageBox(string text, string caption, MessageBoxButtons buttons)
{
InitializeComponent();
InitializeItems();
this.PrimaryColor = primaryColor;
this.labelMessage.Text = text;
this.labelCaption.Text = caption;
SetFormSize();
SetButtons(buttons, MessageBoxDefaultButton.Button1);//Set [Default Button 1]
}
public FormMessageBox(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon)
{
InitializeComponent();
InitializeItems();
this.PrimaryColor = primaryColor;
this.labelMessage.Text = text;
this.labelCaption.Text = caption;
SetFormSize();
SetButtons(buttons, MessageBoxDefaultButton.Button1);//Set [Default Button 1]
SetIcon(icon);
}
public FormMessageBox(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)
{
InitializeComponent();
InitializeItems();
this.PrimaryColor = primaryColor;
this.labelMessage.Text = text;
this.labelCaption.Text = caption;
SetFormSize();
SetButtons(buttons, defaultButton);
SetIcon(icon);
}
//-> Private Methods
private void InitializeItems()
{
this.FormBorderStyle = FormBorderStyle.None;
this.Padding = new Padding(Globals.borderSize);//Set border size
this.panelTitleBar.Padding = new Padding(0, 0, 0, Globals.borderSize);
this.labelMessage.MaximumSize = new Size(550, 0);
this.btnClose.DialogResult = DialogResult.Cancel;
this.button1.DialogResult = DialogResult.OK;
this.button1.Visible = false;
this.button2.Visible = false;
this.button3.Visible = false;
}
private void SetFormSize()
{
int widht = this.labelMessage.Width + this.pictureBoxIcon.Width + this.panelBody.Padding.Left;
int height = this.panelTitleBar.Height + this.labelMessage.Height + this.panelButtons.Height + this.panelBody.Padding.Top;
this.Size = new Size(widht, height);
}
private void SetButtons(MessageBoxButtons buttons, MessageBoxDefaultButton defaultButton)
{
int xCenter = (this.panelButtons.Width - button1.Width) / 2;
int yCenter = (this.panelButtons.Height - button1.Height) / 2;
switch (buttons)
{
case MessageBoxButtons.OK:
//OK Button
button1.Visible = true;
button1.Location = new Point(xCenter, yCenter);
button1.Text = "Ok";
button1.DialogResult = DialogResult.OK;//Set DialogResult
//Set Default Button
SetDefaultButton(defaultButton);
break;
case MessageBoxButtons.OKCancel:
//OK Button
button1.Visible = true;
button1.Location = new Point(xCenter - (button1.Width / 2) - 5, yCenter);
button1.Text = "Ok";
button1.DialogResult = DialogResult.OK;//Set DialogResult
//Cancel Button
button2.Visible = true;
button2.Location = new Point(xCenter + (button2.Width / 2) + 5, yCenter);
button2.Text = "Cancel";
button2.DialogResult = DialogResult.Cancel;//Set DialogResult
button2.BackColor = Color.DimGray;
//Set Default Button
if (defaultButton != MessageBoxDefaultButton.Button3)//There are only 2 buttons, so the Default Button cannot be Button3
SetDefaultButton(defaultButton);
else SetDefaultButton(MessageBoxDefaultButton.Button1);
break;
case MessageBoxButtons.RetryCancel:
//Retry Button
button1.Visible = true;
button1.Location = new Point(xCenter - (button1.Width / 2) - 5, yCenter);
button1.Text = "Retry";
button1.DialogResult = DialogResult.Retry;//Set DialogResult
//Cancel Button
button2.Visible = true;
button2.Location = new Point(xCenter + (button2.Width / 2) + 5, yCenter);
button2.Text = "Cancel";
button2.DialogResult = DialogResult.Cancel;//Set DialogResult
button2.BackColor = Color.DimGray;
//Set Default Button
if (defaultButton != MessageBoxDefaultButton.Button3)//There are only 2 buttons, so the Default Button cannot be Button3
SetDefaultButton(defaultButton);
else SetDefaultButton(MessageBoxDefaultButton.Button1);
break;
case MessageBoxButtons.YesNo:
//Yes Button
button1.Visible = true;
button1.Location = new Point(xCenter - (button1.Width / 2) - 5, yCenter);
button1.Text = "Yes";
button1.DialogResult = DialogResult.Yes;//Set DialogResult
//No Button
button2.Visible = true;
button2.Location = new Point(xCenter + (button2.Width / 2) + 5, yCenter);
button2.Text = "No";
button2.DialogResult = DialogResult.No;//Set DialogResult
button2.BackColor = Color.IndianRed;
//Set Default Button
if (defaultButton != MessageBoxDefaultButton.Button3)//There are only 2 buttons, so the Default Button cannot be Button3
SetDefaultButton(defaultButton);
else SetDefaultButton(MessageBoxDefaultButton.Button1);
break;
case MessageBoxButtons.YesNoCancel:
//Yes Button
button1.Visible = true;
button1.Location = new Point(xCenter - button1.Width - 5, yCenter);
button1.Text = "Yes";
button1.DialogResult = DialogResult.Yes;//Set DialogResult
//No Button
button2.Visible = true;
button2.Location = new Point(xCenter, yCenter);
button2.Text = "No";
button2.DialogResult = DialogResult.No;//Set DialogResult
button2.BackColor = Color.IndianRed;
//Cancel Button
button3.Visible = true;
button3.Location = new Point(xCenter + button2.Width + 5, yCenter);
button3.Text = "Cancel";
button3.DialogResult = DialogResult.Cancel;//Set DialogResult
button3.BackColor = Color.DimGray;
//Set Default Button
SetDefaultButton(defaultButton);
break;
case MessageBoxButtons.AbortRetryIgnore:
//Abort Button
button1.Visible = true;
button1.Location = new Point(xCenter - button1.Width - 5, yCenter);
button1.Text = "Abort";
button1.DialogResult = DialogResult.Abort;//Set DialogResult
button1.BackColor = Color.Goldenrod;
//Retry Button
button2.Visible = true;
button2.Location = new Point(xCenter, yCenter);
button2.Text = "Retry";
button2.DialogResult = DialogResult.Retry;//Set DialogResult
//Ignore Button
button3.Visible = true;
button3.Location = new Point(xCenter + button2.Width + 5, yCenter);
button3.Text = "Ignore";
button3.DialogResult = DialogResult.Ignore;//Set DialogResult
button3.BackColor = Color.IndianRed;
//Set Default Button
SetDefaultButton(defaultButton);
break;
}
}
private void SetDefaultButton(MessageBoxDefaultButton defaultButton)
{
switch (defaultButton)
{
case MessageBoxDefaultButton.Button1://Focus button 1
button1.Select();
button1.ForeColor = Color.White;
button1.Font = new Font(button1.Font, FontStyle.Underline);
break;
case MessageBoxDefaultButton.Button2://Focus button 2
button2.Select();
button2.ForeColor = Color.White;
button2.Font = new Font(button2.Font, FontStyle.Underline);
break;
case MessageBoxDefaultButton.Button3://Focus button 3
button3.Select();
button3.ForeColor = Color.White;
button3.Font = new Font(button3.Font, FontStyle.Underline);
break;
}
}
private void SetIcon(MessageBoxIcon icon)
{
switch (icon)
{
case MessageBoxIcon.Error: //Error
this.pictureBoxIcon.Image = Properties.Resources.error;
//PrimaryColor = Color.FromArgb(224, 79, 95);
this.btnClose.FlatAppearance.MouseOverBackColor = Color.Crimson;
break;
case MessageBoxIcon.Information: //Information
this.pictureBoxIcon.Image = Properties.Resources.information;
//PrimaryColor = Color.FromArgb(38, 191, 166);
break;
case MessageBoxIcon.Question://Question
this.pictureBoxIcon.Image = Properties.Resources.question;
//PrimaryColor = Color.FromArgb(10, 119, 232);
break;
case MessageBoxIcon.Exclamation://Exclamation
this.pictureBoxIcon.Image = Properties.Resources.exclamation;
//PrimaryColor = Color.FromArgb(255, 140, 0);
break;
case MessageBoxIcon.None: //None
this.pictureBoxIcon.Image = Properties.Resources.chat;
//PrimaryColor = Color.CornflowerBlue;
break;
}
}
//-> Events Methods
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
#region -> Drag Form
[DllImport("user32.DLL", EntryPoint = "SendMessage")]
private extern static void SendMessage(System.IntPtr hWnd, int wMsg, int wParam, int lParam);
[DllImport("user32.DLL", EntryPoint = "ReleaseCapture")]
private extern static void ReleaseCapture();
private void panelTitleBar_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, 0x112, 0xf012, 0);
}
#endregion
}
}