从这个链接我想显示一个像
这样的MessageBox格式化将清除此磁盘上的所有数据。
在那个名为按钮的格式上
我没有发现它是一个MessageBox
怎么做的?
这只是一个自定义模态窗口吗?
这似乎很接近但不重命名按钮
我知道你不应该在标题中使用标签,但已经有Custom MessageBox标题,但它处理的是表格。
答案 0 :(得分:3)
您可以使用WPF Toolkit自定义MessageBox
然后更改 OkButtonContent
设置确定按钮的内容。
答案 1 :(得分:3)
实现您的目标:
例如
public partial class CustomMessageBoxWindow:Window {}
设计该窗口的布局。 您将需要标题的标签。左侧的图像和显示消息的标签。另外,您可能需要添加各种按钮,例如是/否,确定/取消。
通过使用其他课程来揭露您的所作所为。我们说CustomMessageBox。
此link提供了一个实现,您可以查看。
答案 2 :(得分:2)
试试这段代码,
public 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;
private static Point lastMousePos;
[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(0, 50, 90);
this.StartPosition = FormStartPosition.CenterScreen;
this.Padding = new System.Windows.Forms.Padding(3);
this.Width = 400;
_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(0, 0, 90);
_plFooter.Height = 80;
_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 += MsgBox_MouseDown;
control.MouseMove += MsgBox_MouseMove;
}
this.Controls.Add(_plHeader);
this.Controls.Add(_plIcon);
this.Controls.Add(_plFooter);
}
private static void MsgBox_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
lastMousePos = new Point(e.X, e.Y);
}
}
private static void MsgBox_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 MsgBox();
_msgBox._lblMessage.Text = message;
MsgBox.InitButtons(Buttons.OK);
_msgBox.ShowDialog();
MessageBeep(0);
return _buttonResult;
}
public static DialogResult Show(string message, string title)
{
_msgBox = new MsgBox();
_msgBox._lblMessage.Text = message;
_msgBox._lblTitle.Text = title;
_msgBox.Size = MsgBox.MessageSize(message);
MsgBox.InitButtons(Buttons.OK);
_msgBox.ShowDialog();
MessageBeep(0);
return _buttonResult;
}
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)
{
_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();
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(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);
_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 = SystemIcons.Exclamation.ToBitmap();
break;
case MsgBox.Icon.Error:
_msgBox._picIcon.Image = SystemIcons.Error.ToBitmap();
break;
case MsgBox.Icon.Info:
_msgBox._picIcon.Image = SystemIcons.Information.ToBitmap();
break;
case MsgBox.Icon.Question:
_msgBox._picIcon.Image = SystemIcons.Question.ToBitmap();
break;
case MsgBox.Icon.Shield:
_msgBox._picIcon.Image = SystemIcons.Shield.ToBitmap();
break;
case MsgBox.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 + 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;
}
}
您可以在代码中使用此消息框,如
MsgBox.Show("Are you sure you want to close the Application ?", "Confirmation", MsgBox.Buttons.YesNo, MsgBox.Icon.Question, MsgBox.AnimateStyle.FadeIn);
或者如果要检查结果,单击哪个按钮
var result = MsgBox.Show("Are you sure you want to close the Application ?", "Confirmation", MsgBox.Buttons.YesNo, MsgBox.Icon.Question, MsgBox.AnimateStyle.FadeIn);
if (result == System.Windows.Forms.DialogResult.No)
{
////do whatever you want
}
您的消息框将如下所示
如果您想更改背景颜色,请在此处更改
this.BackColor = Color.FromArgb(0, 50, 90);
和
_plFooter.BackColor = Color.FromArgb(0, 0, 90);
答案 3 :(得分:1)
这似乎很接近:
http://www.codeproject.com/Articles/201894/A-Customizable-WPF-MessageBox
01234567890123456789
答案 4 :(得分:0)
MessageBox.Show上有一些重载可以发出消息:
MessageBox.Show("Formatting will erase all data on this disk. \nTo format the disk, click OK. To quit, click Cancel.",
"Format Local Disk (F:)",
MessageBoxButton.OKCancel,
MessageBoxImage.Exclamation);
MessageBoxButton
枚举可让您在OK
,OKCancel
,YesNo
和YesNoCancel
之间进行选择。如果你想要不同的按钮,我恐怕你必须使用其他答案的建议并创建你自己的窗口。