现在的位置: 首页 > 综合 > 正文

WinForm自定义的MessageBox介绍

2013年09月07日 ⁄ 综合 ⁄ 共 14369字 ⁄ 字号 评论关闭

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace MsgBox
{
   
public
partial class MyMsgBox : Form
    {
        [DllImport(
"user32.dll", CharSet
= CharSet.Auto)]
       
private
static
extern bool MessageBeep(uint type);

        [DllImport("Shell32.dll")]
       
public
extern
static int ExtractIconEx(string libName,
int iconIndex, IntPtr[] largeIcon, IntPtr[] smallIcon,
int nIcons);

        static
private IntPtr[] largeIcon;
       
static
private IntPtr[] smallIcon;

        static
private MyMsgBox newMessageBox;
       
static
private Label frmTitle;
       
static
private Label frmMessage;
       
static
private PictureBox pIcon;
       
static
private FlowLayoutPanel flpButtons;
       
static
private Icon frmIcon;

        static
private Button btnOK;
       
static
private Button btnAbort;
       
static
private Button btnRetry;
       
static
private Button btnIgnore;
       
static
private Button btnCancel;
       
static
private Button btnYes;
       
static
private Button btnNo;

        static
private DialogResult CYReturnButton;

        public
enum MyIcon
        {
            Error,
            Explorer,
            Find,
            Information,
            Mail,
            Media,
            Print,
            Question,
            RecycleBinEmpty,
            RecycleBinFull,
            Stop,
            User,
            Warning
        }

        public
enum MyButtons
        {
            AbortRetryIgnore,
            OK,
            OKCancel,
            RetryCancel,
            YesNo,
            YesNoCancel
        }

        static
private
void BuildMessageBox(string title)
        {
            newMessageBox
=
new MyMsgBox();
            newMessageBox.Text
= title;
            newMessageBox.Size
=
new System.Drawing.Size(400,
200);
            newMessageBox.StartPosition
= System.Windows.Forms.FormStartPosition.CenterScreen;
            newMessageBox.FormBorderStyle
= System.Windows.Forms.FormBorderStyle.None;
            newMessageBox.Paint
+=
new PaintEventHandler(newMessageBox_Paint);
            newMessageBox.BackColor
= System.Drawing.Color.White;

            TableLayoutPanel tlp =
new TableLayoutPanel();
            tlp.RowCount
=
3;
            tlp.ColumnCount
=
0;
            tlp.Dock
= System.Windows.Forms.DockStyle.Fill;
            tlp.RowStyles.Add(
new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute,
22));
            tlp.RowStyles.Add(
new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
            tlp.RowStyles.Add(
new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute,
50));
            tlp.BackColor
= System.Drawing.Color.Transparent;
            tlp.Padding
=
new Padding(2,
5, 2,
2);

            frmTitle =
new Label();
            frmTitle.Dock
= System.Windows.Forms.DockStyle.Fill;
            frmTitle.BackColor
= System.Drawing.Color.Transparent;
            frmTitle.ForeColor
= System.Drawing.Color.White;
            frmTitle.Font
=
new Font("Tahoma",
9, FontStyle.Bold);

            frmMessage =
new Label();
            frmMessage.Dock
= System.Windows.Forms.DockStyle.Fill;
            frmMessage.BackColor
= System.Drawing.Color.White;
            frmMessage.Font
=
new Font("Tahoma",
9, FontStyle.Regular);
            frmMessage.Text
=
"hiii";

            largeIcon =
new IntPtr[250];
            smallIcon
=
new IntPtr[250];
            pIcon
=
new PictureBox();
            ExtractIconEx(
"shell32.dll",
0, largeIcon, smallIcon,
250);

            flpButtons =
new FlowLayoutPanel();
            flpButtons.FlowDirection
= System.Windows.Forms.FlowDirection.RightToLeft;
            flpButtons.Padding
=
new Padding(0,
5, 5,
0);
            flpButtons.Dock
= System.Windows.Forms.DockStyle.Fill;
            flpButtons.BackColor
= System.Drawing.Color.FromArgb(240,
240,
240);

            TableLayoutPanel tlpMessagePanel =
new TableLayoutPanel();
            tlpMessagePanel.BackColor
= System.Drawing.Color.White;
            tlpMessagePanel.Dock
= System.Windows.Forms.DockStyle.Fill;
            tlpMessagePanel.ColumnCount
=
2;
            tlpMessagePanel.RowCount
=
0;
            tlpMessagePanel.Padding
=
new Padding(4,
5, 4,
4);
            tlpMessagePanel.ColumnStyles.Add(
new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute,
50));
            tlpMessagePanel.ColumnStyles.Add(
new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
            tlpMessagePanel.Controls.Add(pIcon);
            tlpMessagePanel.Controls.Add(frmMessage);

            tlp.Controls.Add(frmTitle);
            tlp.Controls.Add(tlpMessagePanel);
            tlp.Controls.Add(flpButtons);
            newMessageBox.Controls.Add(tlp);
        }

        ///
<summary>
       
/// Message: Text to display in the message box.
       
///
</summary>
        static
public DialogResult Show(string Message)
        {
            BuildMessageBox(
"");
            frmMessage.Text
= Message;
            ShowOKButton();
            newMessageBox.ShowDialog();
           
return CYReturnButton;
        }

        ///
<summary>
       
/// Title: Text to display in the title bar of the messagebox.
       
///
</summary>
        static
public DialogResult Show(string Message,
string Title)
        {
            BuildMessageBox(Title);
            frmTitle.Text
= Title;
            frmMessage.Text
= Message;
            ShowOKButton();
            newMessageBox.ShowDialog();
           
return CYReturnButton;
        }

        ///
<summary>
       
/// MButtons: Display MyButtons on the message box.
       
///
</summary>
        static
public DialogResult Show(string Message,
string Title, MyButtons MButtons)
        {
            BuildMessageBox(Title);
// BuildMessageBox method, responsible for creating the MessageBox
            frmTitle.Text = Title;
// Set the title of the MessageBox
            frmMessage.Text = Message;
//Set the text of the MessageBox
            ButtonStatements(MButtons);
// ButtonStatements method is responsible for showing the appropreiate buttons
            newMessageBox.ShowDialog();
// Show the MessageBox as a Dialog.
            return CYReturnButton;
// Return the button click as an Enumerator
        }

        ///
<summary>
       
/// MIcon: Display MyIcon on the message box.
       
///
</summary>
        static
public DialogResult Show(string Message,
string Title, MyButtons MButtons, MyIcon MIcon)
        {
            BuildMessageBox(Title);
            frmTitle.Text
= Title;
            frmMessage.Text
= Message;
            ButtonStatements(MButtons);
            IconStatements(MIcon);
            Image imageIcon
=
new Bitmap(frmIcon.ToBitmap(),
38, 38);
            pIcon.Image
= imageIcon;
            newMessageBox.ShowDialog();
           
return CYReturnButton;
        }

        static
void btnOK_Click(object sender, EventArgs e)
        {
            CYReturnButton
= DialogResult.OK;
            newMessageBox.Dispose();
        }

        static
void btnAbort_Click(object sender, EventArgs e)
        {
            CYReturnButton
= DialogResult.Abort;
            newMessageBox.Dispose();
        }

        static
void btnRetry_Click(object sender, EventArgs e)
        {
            CYReturnButton
= DialogResult.Retry;
            newMessageBox.Dispose();
        }

        static
void btnIgnore_Click(object sender, EventArgs e)
        {
            CYReturnButton
= DialogResult.Ignore;
            newMessageBox.Dispose();
        }

        static
void btnCancel_Click(object sender, EventArgs e)
        {
            CYReturnButton
= DialogResult.Cancel;
            newMessageBox.Dispose();
        }

        static
void btnYes_Click(object sender, EventArgs e)
        {
            CYReturnButton
= DialogResult.Yes;
            newMessageBox.Dispose();
        }

        static
void btnNo_Click(object sender, EventArgs e)
        {
            CYReturnButton
= DialogResult.No;
            newMessageBox.Dispose();
        }

        static
private
void ShowOKButton()
        {
            btnOK
=
new Button();
            btnOK.Text
=
"OK";
            btnOK.Size
=
new System.Drawing.Size(80,
25);
            btnOK.BackColor
= System.Drawing.Color.FromArgb(255,
255,
255);
            btnOK.Font
=
new Font("Tahoma",
8, FontStyle.Regular);
            btnOK.Click
+=
new EventHandler(btnOK_Click);
            flpButtons.Controls.Add(btnOK);
        }

        static
private
void ShowAbortButton()
        {
            btnAbort
=
new Button();
            btnAbort.Text
=
"Abort";
            btnAbort.Size
=
new System.Drawing.Size(80,
25);
            btnAbort.BackColor
= System.Drawing.Color.FromArgb(255,
255,
255);
            btnAbort.Font
=
new Font("Tahoma",
8, FontStyle.Regular);
            btnAbort.Click
+=
new EventHandler(btnAbort_Click);
            flpButtons.Controls.Add(btnAbort);
        }

        static
private
void ShowRetryButton()
        {
            btnRetry
=
new Button();
            btnRetry.Text
=
"Retry";
            btnRetry.Size
=
new System.Drawing.Size(80,
25);
            btnRetry.BackColor
= System.Drawing.Color.FromArgb(255,
255,
255);
            btnRetry.Font
=
new Font("Tahoma",
8, FontStyle.Regular);
            btnRetry.Click
+=
new EventHandler(btnRetry_Click);
            flpButtons.Controls.Add(btnRetry);
        }

        static
private
void ShowIgnoreButton()
        {
            btnIgnore
=
new Button();
            btnIgnore.Text
=
"Ignore";
            btnIgnore.Size
=
new System.Drawing.Size(80,
25);
            btnIgnore.BackColor
= System.Drawing.Color.FromArgb(255,
255,
255);
            btnIgnore.Font
=
new Font("Tahoma",
8, FontStyle.Regular);
            btnIgnore.Click
+=
new EventHandler(btnIgnore_Click);
            flpButtons.Controls.Add(btnIgnore);
        }

        static
private
void ShowCancelButton()
        {
            btnCancel
=
new Button();
            btnCancel.Text
=
"Cancel";
            btnCancel.Size
=
new System.Drawing.Size(80,
25);
            btnCancel.BackColor
= System.Drawing.Color.FromArgb(255,
255,
255);
            btnCancel.Font
=
new Font("Tahoma",
8, FontStyle.Regular);
            btnCancel.Click
+=
new EventHandler(btnCancel_Click);
            flpButtons.Controls.Add(btnCancel);
        }

        static
private
void ShowYesButton()
        {
            btnYes
=
new Button();
            btnYes.Text
=
"Yes";
            btnYes.Size
=
new System.Drawing.Size(80,
25);
            btnYes.BackColor
= System.Drawing.Color.FromArgb(255,
255,
255);
            btnYes.Font
=
new Font("Tahoma",
8, FontStyle.Regular);
            btnYes.Click
+=
new EventHandler(btnYes_Click);
            flpButtons.Controls.Add(btnYes);
        }

        static
private
void ShowNoButton()
        {
            btnNo
=
new Button();
            btnNo.Text
=
"No";
            btnNo.Size
=
new System.Drawing.Size(80,
25);
            btnNo.BackColor
= System.Drawing.Color.FromArgb(255,
255,
255);
            btnNo.Font
=
new Font("Tahoma",
8, FontStyle.Regular);
            btnNo.Click
+=
new EventHandler(btnNo_Click);
            flpButtons.Controls.Add(btnNo);
        }

        static
private
void ButtonStatements(MyButtons MButtons)
        {
           
if (MButtons
== MyButtons.AbortRetryIgnore)
            {
                ShowIgnoreButton();
                ShowRetryButton();
                ShowAbortButton();
            }

            if (MButtons
== MyButtons.OK)
            {
                ShowOKButton();
            }

            if (MButtons
== MyButtons.OKCancel)
            {
                ShowCancelButton();
                ShowOKButton();
            }

            if (MButtons
== MyButtons.RetryCancel)
            {
                ShowCancelButton();
                ShowRetryButton();
            }

            if (MButtons
== MyButtons.YesNo)
            {
                ShowNoButton();
                ShowYesButton();
            }

            if (MButtons
== MyButtons.YesNoCancel)
            {
                ShowCancelButton();
                ShowNoButton();
                ShowYesButton();
            }
        }

        static
private
void IconStatements(MyIcon MIcon)
        {
           
if (MIcon
== MyIcon.Error)
            {
                MessageBeep(
30);
                frmIcon
= Icon.FromHandle(largeIcon[109]);
            }

            if (MIcon
== MyIcon.Explorer)
            {
                MessageBeep(
0);
                frmIcon
= Icon.FromHandle(largeIcon[220]);
            }

            if (MIcon
== MyIcon.Find)
            {
                MessageBeep(
0);
                frmIcon
= Icon.FromHandle(largeIcon[22]);
            }

            if (MIcon
== MyIcon.Information)
            {
                MessageBeep(
0);
                frmIcon
= Icon.FromHandle(largeIcon[221]);
            }

            if (MIcon
== MyIcon.Mail)
            {
                MessageBeep(
0);
                frmIcon
= Icon.FromHandle(largeIcon[156]);
            }

            if (MIcon
== MyIcon.Media)
            {
                MessageBeep(
0);
                frmIcon
= Icon.FromHandle(largeIcon[116]);
            }

            if (MIcon
== MyIcon.Print)
            {
                MessageBeep(
0);
                frmIcon
= Icon.FromHandle(largeIcon[136]);
            }

            if (MIcon
== MyIcon.Question)
            {
                MessageBeep(
0);
                frmIcon
= Icon.FromHandle(largeIcon[23]);
            }

            if (MIcon
== MyIcon.RecycleBinEmpty)
            {
                MessageBeep(
0);
                frmIcon
= Icon.FromHandle(largeIcon[31]);
            }

            if (MIcon
== MyIcon.RecycleBinFull)
            {
                MessageBeep(
0);
                frmIcon
= Icon.FromHandle(largeIcon[32]);
            }

            if (MIcon
== MyIcon.Stop)
            {
                MessageBeep(
0);
                frmIcon
= Icon.FromHandle(largeIcon[27]);
            }

            if (MIcon
== MyIcon.User)
            {
                MessageBeep(
0);
                frmIcon
= Icon.FromHandle(largeIcon[170]);
            }

            if (MIcon
== MyIcon.Warning)
            {
                MessageBeep(
30);
                frmIcon
= Icon.FromHandle(largeIcon[217]);
            }
        }

        static
void newMessageBox_Paint(object sender, PaintEventArgs e)
        {
            Graphics g
= e.Graphics;
            Rectangle frmTitleL
=
new Rectangle(0,
0, (newMessageBox.Width
/ 2),
22);
            Rectangle frmTitleR
=
new Rectangle((newMessageBox.Width
/ 2),
0, (newMessageBox.Width
/ 2),
22);
            Rectangle frmMessageBox
=
new Rectangle(0,
0, (newMessageBox.Width
- 1), (newMessageBox.Height
- 1));
            LinearGradientBrush frmLGBL
=
new LinearGradientBrush(frmTitleL, Color.FromArgb(87,
148,
160), Color.FromArgb(209,
230,
243), LinearGradientMode.Horizontal);
            LinearGradientBrush frmLGBR
=
new LinearGradientBrush(frmTitleR, Color.FromArgb(209,
230,
243), Color.FromArgb(87,
148,
160), LinearGradientMode.Horizontal);
            Pen frmPen
=
new Pen(Color.FromArgb(63,
119,
143), 1);
            g.FillRectangle(frmLGBL, frmTitleL);
            g.FillRectangle(frmLGBR, frmTitleR);
            g.DrawRectangle(frmPen, frmMessageBox);
        }
    }
}
调用方法:

 

private
void button1_Click(object sender, EventArgs e)
{
DialogResult result
= MyMsgBox.Show("你好。。。",
"提示", MyMsgBox.MyButtons.YesNo, MyMsgBox.MyIcon.Information);

if (result
== DialogResult.Yes)
{

}

if (result
== DialogResult.No)
{
MyMsgBox.Show(
"你好。。?",
"提示", MyMsgBox.MyButtons.AbortRetryIgnore, MyMsgBox.MyIcon.Stop);
}
}

效果:有很多种选择,

 

转载自:http://www.csharpwin.com/csharpspace/13389r6174.shtml

抱歉!评论已关闭.