#region Imports
|
|
using DPumpHydr.WinFrmUI.RLT.Extension.Metro;
|
using DPumpHydr.WinFrmUI.RLT.Forms;
|
using System;
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.Drawing.Text;
|
using System.Windows.Forms;
|
|
#endregion
|
|
namespace DPumpHydr.WinFrmUI.RLT.Controls
|
{
|
#region MetroMessageBox
|
|
public class MetroMessageBox : MetroForm
|
{
|
#region Internal vars
|
|
private Size _buttonSize;
|
private MetroDefaultButton _okButton;
|
private MetroDefaultButton _yesButton;
|
private MetroDefaultButton _noButton;
|
private MetroDefaultButton _cancelButton;
|
private MetroDefaultButton _retryButton;
|
private MetroDefaultButton _abortButton;
|
private MetroDefaultButton _ignoreButton;
|
|
#endregion
|
|
#region Properties
|
|
private Form OwnerForm { get; set; }
|
|
public string Content { get; set; }
|
|
public string Caption { get; set; }
|
|
public MessageBoxButtons Buttons { get; set; }
|
|
public new MessageBoxIcon Icon { get; set; }
|
|
[Browsable(false)]
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
private static new Color BackgroundColor { get; set; }
|
|
[Browsable(false)]
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
private static new Color BorderColor { get; set; }
|
|
[Browsable(false)]
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
private static Color ForegroundColor { get; set; }
|
|
|
#endregion
|
|
#region Constructor
|
|
private MetroMessageBox()
|
{
|
base.Font = MetroFonts.Regular(9.5f);
|
ShowInTaskbar = false;
|
StartPosition = FormStartPosition.CenterParent;
|
_buttonSize = new(95, 32);
|
ApplyTheme();
|
EvaluateControls();
|
AddControls();
|
//HideControls();
|
}
|
|
private void EvaluateControls()
|
{
|
EvaluateOkeyButton();
|
EvaluateYesButton();
|
EvaluateNoButton();
|
EvaluateCancelButton();
|
EvaluateRetryButton();
|
EvaluateAbortButton();
|
EvaluateIgnoreButton();
|
}
|
|
private void AddControls()
|
{
|
Controls.Add(_okButton);
|
Controls.Add(_yesButton);
|
Controls.Add(_noButton);
|
Controls.Add(_cancelButton);
|
Controls.Add(_retryButton);
|
Controls.Add(_abortButton);
|
Controls.Add(_ignoreButton);
|
}
|
|
private void EvaluateRetryButton()
|
{
|
_retryButton = new MetroDefaultButton
|
{
|
Text = @"Retry",
|
Size = _buttonSize,
|
Visible = false
|
};
|
_retryButton.Click += RetryButton_Click;
|
}
|
|
private void EvaluateCancelButton()
|
{
|
_cancelButton = new MetroDefaultButton
|
{
|
Text = @"Cancel",
|
Size = _buttonSize,
|
Visible = false
|
};
|
_cancelButton.Click += CancelButton_Click;
|
}
|
|
private void EvaluateNoButton()
|
{
|
_noButton = new MetroDefaultButton
|
{
|
Text = @"No",
|
Size = _buttonSize,
|
Visible = false
|
};
|
_noButton.Click += NoButton_Click;
|
}
|
|
private void EvaluateYesButton()
|
{
|
_yesButton = new MetroDefaultButton
|
{
|
Text = @"Yes",
|
Size = _buttonSize,
|
Visible = false
|
};
|
_yesButton.Click += YesButton_Click;
|
}
|
|
private void EvaluateOkeyButton()
|
{
|
_okButton = new MetroDefaultButton
|
{
|
Text = @"Ok",
|
Size = _buttonSize,
|
Visible = false
|
};
|
_okButton.Click += OkButton_Click;
|
}
|
|
private void EvaluateAbortButton()
|
{
|
_abortButton = new MetroDefaultButton
|
{
|
Text = @"Abort",
|
Size = _buttonSize,
|
Visible = false
|
|
};
|
_abortButton.Click += AbortButton_Click;
|
}
|
|
private void EvaluateIgnoreButton()
|
{
|
_ignoreButton = new MetroDefaultButton
|
{
|
Text = @"Ignore",
|
Size = _buttonSize,
|
Visible = false
|
};
|
_ignoreButton.Click += IgnoreButton_Click;
|
}
|
|
#endregion
|
|
#region Events
|
|
private void RetryButton_Click(object sender, EventArgs e)
|
{
|
DialogResult = DialogResult.Retry;
|
}
|
|
private void CancelButton_Click(object sender, EventArgs e)
|
{
|
DialogResult = DialogResult.Cancel;
|
}
|
|
private void NoButton_Click(object sender, EventArgs e)
|
{
|
DialogResult = DialogResult.No;
|
}
|
|
private void YesButton_Click(object sender, EventArgs e)
|
{
|
DialogResult = DialogResult.Yes;
|
}
|
|
private void OkButton_Click(object sender, EventArgs e)
|
{
|
DialogResult = DialogResult.OK;
|
}
|
|
private void AbortButton_Click(object sender, EventArgs e)
|
{
|
DialogResult = DialogResult.Abort;
|
}
|
|
private void IgnoreButton_Click(object sender, EventArgs e)
|
{
|
DialogResult = DialogResult.Ignore;
|
}
|
|
public static DialogResult Show(MetroForm form, string content)
|
{
|
return Show(form, content, form.Text, MessageBoxButtons.OK, MessageBoxIcon.None);
|
}
|
|
public static DialogResult Show(MetroForm form, string content, string caption)
|
{
|
return Show(form, content, caption, MessageBoxButtons.OK, MessageBoxIcon.None);
|
}
|
|
public static DialogResult Show(MetroForm form, string content, string caption, MessageBoxButtons buttons)
|
{
|
return Show(form, content, caption, buttons, MessageBoxIcon.None);
|
}
|
|
public static DialogResult Show(MetroForm form, string content, string caption, MessageBoxButtons buttons, MessageBoxIcon icon)
|
{
|
const string message = @"MetroMessageBox requires a form, use 'this' as the first parameter in the place you use MetroMessageBox.";
|
MetroMessageBox msgBox = new()
|
{
|
OwnerForm = form ?? throw new ArgumentNullException(message),
|
Content = content,
|
Caption = caption,
|
Buttons = buttons,
|
Size = new(form.Width - 2, (form.Height / 3) - 1),
|
Location = new(form.Location.X, (form.Height / 2) - 1)
|
};
|
if (icon is MessageBoxIcon.Error or MessageBoxIcon.Stop)
|
{
|
BackgroundColor = Color.FromArgb(210, 50, 45);
|
BorderColor = Color.FromArgb(210, 50, 45);
|
ForegroundColor = Color.White;
|
}
|
else if (icon == MessageBoxIcon.Information)
|
{
|
BackgroundColor = Color.FromArgb(60, 180, 218);
|
BorderColor = Color.FromArgb(60, 180, 218);
|
ForegroundColor = Color.White;
|
}
|
else if (icon == MessageBoxIcon.Question)
|
{
|
BackgroundColor = Color.FromArgb(70, 165, 70);
|
BorderColor = Color.FromArgb(70, 165, 70);
|
ForegroundColor = Color.White;
|
}
|
else if (icon is MessageBoxIcon.Exclamation or MessageBoxIcon.Warning)
|
{
|
BackgroundColor = Color.FromArgb(237, 156, 40);
|
BorderColor = Color.FromArgb(237, 156, 40);
|
ForegroundColor = Color.White;
|
}
|
else if (icon is MessageBoxIcon.None or MessageBoxIcon.Asterisk or MessageBoxIcon.Hand)
|
{
|
BackgroundColor = Color.White;
|
BorderColor = Color.FromArgb(65, 177, 225);
|
ForegroundColor = Color.Black;
|
}
|
|
return msgBox.ShowDialog();
|
}
|
|
protected new DialogResult ShowDialog()
|
{
|
|
int buttonHeight = Height - 45;
|
int firstButton = Width - _buttonSize.Width - 10;
|
int secondButoon = Width - (_buttonSize.Width * 2) - 20;
|
switch (Buttons)
|
{
|
case MessageBoxButtons.OK:
|
_okButton.Location = new(firstButton, buttonHeight);
|
_okButton.Visible = true;
|
break;
|
case MessageBoxButtons.OKCancel:
|
_okButton.Location = new(secondButoon, buttonHeight);
|
_okButton.Visible = true;
|
_cancelButton.Location = new(firstButton, buttonHeight);
|
_cancelButton.Visible = true;
|
break;
|
case MessageBoxButtons.YesNo:
|
_yesButton.Location = new(secondButoon, buttonHeight);
|
_yesButton.Visible = true;
|
_noButton.Location = new(firstButton, buttonHeight);
|
_noButton.Visible = true;
|
break;
|
case MessageBoxButtons.YesNoCancel:
|
_yesButton.Location = new(Width - (_buttonSize.Width * 3) - 30, buttonHeight);
|
_yesButton.Visible = true;
|
_noButton.Location = new(secondButoon, buttonHeight);
|
_noButton.Visible = true;
|
_cancelButton.Location = new(firstButton, buttonHeight);
|
_cancelButton.Visible = true;
|
break;
|
case MessageBoxButtons.RetryCancel:
|
_retryButton.Location = new(secondButoon, buttonHeight);
|
_retryButton.Visible = true;
|
_cancelButton.Location = new(firstButton, buttonHeight);
|
_cancelButton.Visible = true;
|
break;
|
case MessageBoxButtons.AbortRetryIgnore:
|
_abortButton.Location = new(Width - (_buttonSize.Width * 3) - 30, buttonHeight);
|
_abortButton.Visible = true;
|
_retryButton.Location = new(secondButoon, buttonHeight);
|
_retryButton.Visible = true;
|
_ignoreButton.Location = new(firstButton, buttonHeight);
|
_ignoreButton.Visible = true;
|
break;
|
default:
|
_okButton.Location = new(firstButton, buttonHeight);
|
_okButton.Visible = true;
|
break;
|
}
|
return base.ShowDialog();
|
}
|
|
#endregion
|
|
#region Draw Dialog
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
Graphics G = e.Graphics;
|
G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
|
|
Rectangle rect = new(0, (OwnerForm.Height - (OwnerForm.Height / 2)) / 250, OwnerForm.Width - 3, (OwnerForm.Height / 3) - 3);
|
|
using SolidBrush bg = new(BackgroundColor);
|
using SolidBrush CTNT = new(ForegroundColor);
|
using Pen p = new(BorderColor);
|
G.FillRectangle(bg, rect);
|
G.DrawString(Caption, Font, CTNT, new PointF(rect.X + 10, rect.Y + 10));
|
G.DrawString(Content, Font, CTNT, new PointF(rect.X + 10, rect.Y + 50));
|
G.DrawRectangle(p, rect);
|
}
|
|
#endregion
|
|
}
|
|
#endregion
|
}
|