1.使用XtraMessageBoxForm,自定义Icon
2.重写XtraMessageBoxForm,自定义消息字体,标题字体
3.注册XtraMessageBoxForm的Showing事件,自定义按钮字体及按钮大小
具体代码如下,只写了简单两种方法,可自己扩展,赋值MessageBoxIcon可以显示想要的Icon
public static class UIMessageBox{static UIMessageBox(){MessageBoxForm.MessageBoxFont = new Font("Arial", 14F); //定义字体类型 }static readonly Icon MessageBoxIcon = null;public static void Show(string message){ShowInternal(null, message, "Notice", SystemIcons.Information, DialogResult.OK);}public static void Show(Control owner, string message){ShowInternal(owner, message, "Notice", SystemIcons.Information, DialogResult.OK);}
private static DialogResult ShowInternal(Control owner, string message, string caption, Icon messageIcon, params DialogResult[] dialogResults){MessageBoxForm form = new MessageBoxForm();form.Icon = MessageBoxIcon;XtraMessageBoxArgs args = new XtraMessageBoxArgs(owner, message, caption, dialogResults, messageIcon, 0);args.Showing += Args_Showing;return form.ShowMessageBoxDialog(args);}private static void Args_Showing(object sender, XtraMessageShowingArgs e){MessageButtonCollection buttons = e.Buttons as MessageButtonCollection;SimpleButton btn = null;foreach (var dialog in (DialogResult[])Enum.GetValues(typeof(DialogResult))){btn = buttons[dialog] as SimpleButton;if (btn != null){btn.Size = new Size(Convert.ToInt32(btn.Width * 1.2), Convert.ToInt32(btn.Height * 1.2)); //按钮大小btn.Font = e.Form.Font; //按钮字体 }}}}internal class MessageBoxForm : XtraMessageBoxForm{internal static Font MessageBoxFont = new Font("Arial", 10F);public MessageBoxForm(){Appearance.Font = MessageBoxFont;}protected override FormPainter CreateFormBorderPainter(){return new MessageBoxFormPainter(this, LookAndFeel);}}internal class MessageBoxFormPainter : FormPainter{internal MessageBoxFormPainter(Control owner, ISkinProvider provider) : base(owner, provider) { }protected override void DrawText(GraphicsCache cache){string text = Text;if (text == null || text.Length == 0 || TextBounds.IsEmpty)return;AppearanceObject appearance = new AppearanceObject(GetDefaultAppearance());appearance.Font = Owner.Font;appearance.TextOptions.Trimming = Trimming.EllipsisCharacter;Rectangle r = RectangleHelper.GetCenterBounds(TextBounds, new Size(TextBounds.Width, appearance.CalcDefaultTextSize(cache.Graphics).Height));DrawTextShadow(cache, appearance, r);cache.DrawString(text, appearance.Font, appearance.GetForeBrush(cache), r, appearance.GetStringFormat());}protected override int CalcTextHeight(Graphics graphics, AppearanceObject appearance){return (int)(graphics.MeasureString(Text, Owner.Font).Height); //标题栏的高度 }}
调用时:
UIMessageBox.Show("This is a message");