Добавьте winform
в ваш проект (я назвал его frmShowMessage
) и поместите в него элементы управления:
1. Panel (pnlShowMessage)
2. Label (lblMessageText)
3. PictureBox (pictureBox1)
4. ImageList (imageList1)
Замените ваши новые коды формы, как показано ниже:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace CostumeMessageBox
{
public partial class frmShowMessage : Form
{
Button btnOk = new Button(); //Create object of Button.
Button btnCancel = new Button();
Button btnNo = new Button();
Button btnYes = new Button();
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
public frmShowMessage()
{
InitializeComponent();
}
/// <summary>
/// Here I am overriding Paint method of form object
/// and set it's background color as gradient. Here I am
/// using LinearGradientBrush class object to make gradient
/// color which comes in System.Drawing.Drawing2D namespace.
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
ControlPaint.DrawBorder(e.Graphics, ClientRectangle,
Color.DarkRed, 3, ButtonBorderStyle.Solid,
Color.DarkRed, 3, ButtonBorderStyle.Solid,
Color.DarkRed, 3, ButtonBorderStyle.Solid,
Color.DarkRed, 3, ButtonBorderStyle.Solid);
//Rectangle rect = this.ClientRectangle;
//LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Snow, Color.SeaShell, 60); //LightCyan Lavender LightGray
//e.Graphics.FillRectangle(brush, rect);
//base.OnPaint(e);
}
private void frmShowMessage_Load(object sender, EventArgs e)
{
btnOk.Text = "تایید"; //Here we set text of Button.
btnOk.DialogResult = DialogResult.OK; //Set DialogResult property of button.
btnOk.FlatStyle = FlatStyle.Popup; //Set flat appearence of button.
btnOk.BackColor = Color.Beige;
btnOk.FlatAppearance.BorderSize = 0;
btnCancel.Text = "انصراف";
btnCancel.DialogResult = DialogResult.Cancel;
btnCancel.FlatStyle = FlatStyle.Popup;
btnCancel.BackColor = Color.Beige;
btnCancel.FlatAppearance.BorderSize = 0;
btnNo.Text = "خیر";
btnNo.DialogResult = DialogResult.No;
btnNo.FlatStyle = FlatStyle.Popup;
btnNo.BackColor = Color.Beige;
btnNo.FlatAppearance.BorderSize = 0;
btnYes.Text = "بله";
btnYes.DialogResult = DialogResult.Yes;
btnYes.FlatStyle = FlatStyle.Popup;
btnYes.BackColor = Color.Beige;
btnYes.FlatAppearance.BorderSize = 0;
}
/// <summary>
/// setMessage method is used to display message
/// on form and it's height adjust automatically.
/// I am displaying message in a Label control.
/// </summary>
/// <param name="messageText">Message which needs to be displayed to user.</param>
private void setMessage(string messageText)
{
int number = Math.Abs(messageText.Length / 30);
if (number != 0)
{
lblMessageText.Height = lblRightBorder.Height = number*25;
Height = lblMessageText.Height;
}
lblMessageText.Text = messageText;
}
/// <summary>
/// This method is used to add button on message box.
/// </summary>
/// <param name="MessageButton">MessageButton is type of enumMessageButton
/// through which I get type of button which needs to be displayed.</param>
private void addButton(enumMessageButton MessageButton)
{
switch (MessageButton)
{
case enumMessageButton.OK:
{
//If type of enumButton is OK then we add OK button only.
btnOk.SetBounds(pnlShowMessage.ClientSize.Width - 80, 5, 75, 25); // Set bounds of button.
pnlShowMessage.Controls.Add(btnOk); //Finally Add button control on panel.
}
break;
case enumMessageButton.OKCancel:
{
btnOk.SetBounds((pnlShowMessage.ClientSize.Width - 70), 5, 65, 25);
pnlShowMessage.Controls.Add(btnOk);
btnCancel.SetBounds((pnlShowMessage.ClientSize.Width - (btnOk.ClientSize.Width + 5 + 80)), 5, 75, 25);
pnlShowMessage.Controls.Add(btnCancel);
}
break;
case enumMessageButton.YesNo:
{
btnNo.SetBounds((pnlShowMessage.ClientSize.Width - 70), 5, 65, 25);
pnlShowMessage.Controls.Add(btnNo);
btnYes.SetBounds((pnlShowMessage.ClientSize.Width - (btnNo.ClientSize.Width + 5 + 80)), 5, 75, 25);
pnlShowMessage.Controls.Add(btnYes);
}
break;
case enumMessageButton.YesNoCancel:
{
btnCancel.SetBounds((pnlShowMessage.ClientSize.Width - 70), 5, 65, 25);
pnlShowMessage.Controls.Add(btnCancel);
btnNo.SetBounds((pnlShowMessage.ClientSize.Width - (btnCancel.ClientSize.Width + 5 + 80)), 5, 75, 25);
pnlShowMessage.Controls.Add(btnNo);
btnYes.SetBounds((pnlShowMessage.ClientSize.Width - (btnCancel.ClientSize.Width + btnNo.ClientSize.Width + 10 + 80)), 5, 75, 25);
pnlShowMessage.Controls.Add(btnYes);
}
break;
}
}
/// <summary>
/// We can use this method to add image on message box.
/// I had taken all images in ImageList control so that
/// I can eaily add images. Image is displayed in
/// PictureBox control.
/// </summary>
/// <param name="MessageIcon">Type of image to be displayed.</param>
private void addIconImage(enumMessageIcon MessageIcon)
{
switch (MessageIcon)
{
case enumMessageIcon.Error:
pictureBox1.Image = imageList1.Images["Error"]; //Error is key name in imagelist control which uniqly identified images in ImageList control.
break;
case enumMessageIcon.Information:
pictureBox1.Image = imageList1.Images["Information"];
break;
case enumMessageIcon.Question:
pictureBox1.Image = imageList1.Images["Question"];
break;
case enumMessageIcon.Warning:
pictureBox1.Image = imageList1.Images["Warning"];
break;
}
}
#region Overloaded Show message to display message box.
/// <summary>
/// Show method is overloaded which is used to display message
/// and this is static method so that we don't need to create
/// object of this class to call this method.
/// </summary>
/// <param name="messageText"></param>
internal static DialogResult Show(string messageText)
{
frmShowMessage frmMessage = new frmShowMessage();
frmMessage.setMessage(messageText);
frmMessage.addIconImage(enumMessageIcon.Information);
frmMessage.addButton(enumMessageButton.OK);
frmMessage.ShowDialog();
return frmMessage.DialogResult;
}
internal static DialogResult Show(string messageText, string messageTitle)
{
frmShowMessage frmMessage = new frmShowMessage();
frmMessage.Text = messageTitle;
frmMessage.setMessage(messageText);
frmMessage.addIconImage(enumMessageIcon.Information);
frmMessage.addButton(enumMessageButton.OK);
frmMessage.ShowDialog();
return frmMessage.DialogResult;
}
internal static DialogResult Show(string messageText, string messageTitle, enumMessageIcon messageIcon,
enumMessageButton messageButton)
{
frmShowMessage frmMessage = new frmShowMessage();
frmMessage.setMessage(messageText);
frmMessage.Text = messageTitle;
frmMessage.addIconImage(messageIcon);
frmMessage.addButton(messageButton);
frmMessage.ShowDialog();
return frmMessage.DialogResult;
}
#endregion
private void frmShowMessage_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left) return;
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
#region constant defiend in form of enumration which is used in showMessage class.
internal enum enumMessageIcon
{
Error,
Warning,
Information,
Question,
}
internal enum enumMessageButton
{
OK,
YesNo,
YesNoCancel,
OKCancel
}
#endregion
}
Теперь вы можете назвать свой Customized MessageBox
в своем проекте так:
private void btnQuestion_Click(object sender, EventArgs e)
{
frmShowMessage.Show(rch.Text,
"Message Text", enumMessageIcon.Question, enumMessageButton.YesNoCancel);
}
private void btnInformation_Click(object sender, EventArgs e)
{
frmShowMessage.Show(rch.Text,
"Message Text", enumMessageIcon.Information, enumMessageButton.OKCancel);
}
private void btnError_Click(object sender, EventArgs e)
{
frmShowMessage.Show(rch.Text,
"Message Text", enumMessageIcon.Error, enumMessageButton.OK);
}
private void btnWarning_Click(object sender, EventArgs e)
{
frmShowMessage.Show(rch.Text,
"Message Text", enumMessageIcon.Warning, enumMessageButton.YesNo);
}
Я забыл ссылку, по которой узнал это.