using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace DPumpHydr.WinFrmUI.WenSkin { public partial class MsgBox : DPumpHydr.WinFrmUI.WenSkin.Forms.WenForm { public MsgBox() { InitializeComponent(); this.SizeChanged += (s, e) => { if (wenImageButton1 != null) wenImageButton1.Width = (this.Width - this.FrameWidth * 2) / 2; }; Text = "消息"; mesIcon = MsgBoxIcon.Info; this.StartPosition = FormStartPosition.CenterScreen; } public MsgBox(string text) : this() { Message = text; } public MsgBox(string text, MsgBoxIcon mesBoxIcon) : this(text) { MesIcon = mesBoxIcon; switch (MesIcon) { case MsgBoxIcon.Asterisk: Text = "提醒"; break; case MsgBoxIcon.Error: Text = "错误"; break; case MsgBoxIcon.Info: Text = "消息"; break; case MsgBoxIcon.Warning: Text = "警告"; break; default: break; } } public MsgBox(string text, string caption, MsgBoxIcon msg) : this(text,msg) { Text = caption; } #region 私有属性 private string message; private MsgBoxIcon mesIcon; #endregion #region 公有属性 public MsgBoxIcon MesIcon { get => mesIcon; set { mesIcon = value; this.Invalidate(); if (value == MsgBoxIcon.Info) { wenImageButton1.Visible = false; } } } public string Message { get => message; set { message = value; Graphics g = this.CreateGraphics(); SizeF sizef = g.MeasureString(value, this.Font); int width = sizef.Width > 400 ? 400 : (int)sizef.Width + this.FrameWidth * 2 + 80; int height = this.TitleHeight + this.FrameWidth + panel1.Height; this.Size = new Size(this.Width < width ? width : this.Width, this.Height < height ? height : this.Height); this.Invalidate(); } } #endregion public enum MsgBoxIcon { Asterisk, Error, Info, Warning, } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Rectangle rec = new Rectangle(this.FrameWidth, this.TitleHeight, this.Width - this.FrameWidth * 2, this.Height - this.TitleHeight - this.FrameWidth - panel1.Height); Rectangle recStr = new Rectangle(rec.X + 70, rec.Y, rec.Width - 70, rec.Height); Rectangle recIco = new Rectangle(rec.X + 5, rec.Y + (rec.Height - 60) / 2, 60, 60); Graphics g = e.Graphics; using StringFormat sf = new StringFormat(StringFormatFlags.NoClip) { LineAlignment = StringAlignment.Center, Trimming = StringTrimming.EllipsisCharacter }; g.DrawString(Message, Font, new SolidBrush(this.ForeColor), recStr, sf); switch (MesIcon) { case MsgBoxIcon.Asterisk: g.DrawImage(Properties.Resources.Asterisk, recIco); break; case MsgBoxIcon.Error: g.DrawImage(Properties.Resources.error, recIco); break; case MsgBoxIcon.Info: g.DrawImage(Properties.Resources.Info, recIco); break; case MsgBoxIcon.Warning: g.DrawImage(Properties.Resources.Warning, recIco); break; default: break; } } private void wenImageButton2_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; } private void wenImageButton1_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; } } }