一个自定义的窗体样式MessageBox控件
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Runtime.InteropServices;
partial class CYMessageBox : 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 CYMessageBox 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 CYIcon
{
Error,
Explorer,
Find,
Information,
Mail,
Media,
Print,
Question,
RecycleBinEmpty,
RecycleBinFull,
Stop,
User,
Warning
}
public enum CYButtons
{
AbortRetryIgnore,
OK,
OKCancel,
RetryCancel,
YesNo,
YesNoCancel
}
static private void BuildMessageBox(string title)
{
newMessageBox = new CYMessageBox();
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 CYButtons on the message box.
/// </summary>
static public DialogResult Show(string Message, string Title, CYButtons 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 CYIcon on the message box.
/// </summary>
static public DialogResult Show(string Message, string Title, CYButtons MButtons, CYIcon 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(CYButtons MButtons)
{
if (MButtons == CYButtons.AbortRetryIgnore)
{
ShowIgnoreButton();
ShowRetryButton();
ShowAbortButton();
}
if (MButtons == CYButtons.OK)
{
ShowOKButton();
}
if (MButtons == CYButtons.OKCancel)
{
ShowCancelButton();
ShowOKButton();
}
if (MButtons == CYButtons.RetryCancel)
{
ShowCancelButton();
ShowRetryButton();
}
if (MButtons == CYButtons.YesNo)
{
ShowNoButton();
ShowYesButton();
}
if (MButtons == CYButtons.YesNoCancel)
{
ShowCancelButton();
ShowNoButton();
ShowYesButton();
}
}
static private void IconStatements(CYIcon MIcon)
{
if (MIcon == CYIcon.Error)
{
MessageBeep(30);
frmIcon = Icon.FromHandle(largeIcon[109]);
}
if (MIcon == CYIcon.Explorer)
{
MessageBeep(0);
frmIcon = Icon.FromHandle(largeIcon[220]);
}
if (MIcon == CYIcon.Find)
{
MessageBeep(0);
frmIcon = Icon.FromHandle(largeIcon[22]);
}
if (MIcon == CYIcon.Information)
{
MessageBeep(0);
frmIcon = Icon.FromHandle(largeIcon[221]);
}
if (MIcon == CYIcon.Mail)
{
MessageBeep(0);
frmIcon = Icon.FromHandle(largeIcon[156]);
}
if (MIcon == CYIcon.Media)
{
MessageBeep(0);
frmIcon = Icon.FromHandle(largeIcon[116]);
}
if (MIcon == CYIcon.Print)
{
MessageBeep(0);
frmIcon = Icon.FromHandle(largeIcon[136]);
}
if (MIcon == CYIcon.Question)
{
MessageBeep(0);
frmIcon = Icon.FromHandle(largeIcon[23]);
}
if (MIcon == CYIcon.RecycleBinEmpty)
{
MessageBeep(0);
frmIcon = Icon.FromHandle(largeIcon[31]);
}
if (MIcon == CYIcon.RecycleBinFull)
{
MessageBeep(0);
frmIcon = Icon.FromHandle(largeIcon[32]);
}
if (MIcon == CYIcon.Stop)
{
MessageBeep(0);
frmIcon = Icon.FromHandle(largeIcon[27]);
}
if (MIcon == CYIcon.User)
{
MessageBeep(0);
frmIcon = Icon.FromHandle(largeIcon[170]);
}
if (MIcon == CYIcon.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);
}
}
一个自定义的窗体样式MessageBox控件的更多相关文章
- [Swift通天遁地]九、拔剑吧-(3)创建多种自定义Segment分段样式的控件
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件)
最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是 ...
- 深入Windows窗体原理及控件重绘技巧
之前有学MFC的同学告诉我觉得Windows的控件重绘难以理解,就算重绘成功了还是有些地方不明白,我觉得可能很多人都有这样的问题,在这里我从Windows窗体的最基本原理来讲解,如果你有类似的疑惑希望 ...
- WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探
原文:WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探 最近因为项目需要,开始学习如何使用WPF开发桌面程序.使用WPF一段时间之后,感 ...
- [译]- 6-1 排列窗体上的控件(Laying Out Widgets on a Form)
排列窗体上的控件(Laying Out Widgets on a Form) 中英文对照:form(窗体),layout(布局或者排列,意思是进行窗体上控件的排列的过程,如大小位置等) absolu ...
- WPF中不规则窗体与WindowsFormsHost控件的兼容问题完美解决方案
首先先得瑟一下,有关WPF中不规则窗体与WindowsFormsHost控件不兼容的问题,网上给出的解决方案不能满足所有的情况,是有特定条件的,比如 WPF中不规则窗体与WebBrowser控件的兼 ...
- Windows Phone开发(16):样式和控件模板
原文:Windows Phone开发(16):样式和控件模板 在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的 ...
- Windows常见窗口样式和控件风格
Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用)WS_CHILDWINDOW 子窗口(不能与WS_PO ...
- 福利到~分享一个基于jquery的智能提示控件intellSeach.js
一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管理系统,想搜索李XX,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户 ...
随机推荐
- Sql语句统计多表个数并求和
) FROM ((SELECT BaseID FROM dbo.Life_cheliang WHERE BaseCreateDate BETWEEN '2015-6-5' AND '2015-6-11 ...
- Jenkins简单使用介绍
一.Jenkins的配置 1. 下载地址: Jenkins的官方网站:http://jenkins-ci.org/ 目前最新版本的Windows版:http://mirror.xmission.com ...
- 细谈HTML5
回顾过了html接下来我们就来看看HTML5吧! HTML5手机应用的最大优势就是可以在网页上直接调试和修改.原先应用的开发人员可能需要花费非常大的力气才能达到HTML5的效果,不断地重复编码.调试和 ...
- Java集合——List接口
1.定义 List是Collection的子接口,元素有序并且可以重复,表示线性表. 2.方法 add(int index,Object e):在指定索引(和数组下标类似,为0,1,2....)放入元 ...
- HDU 1171(01背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 449. Serialize and Deserialize BST——几乎所有树的面试题目都会回到BFS或者DFS,使用BFS,None节点存#
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- Windows 8 App: Information about CloudsCool Helper application
Website:http://www.cloudscool.com: App download address:http://dwz.cn/7DOJm: App English introduct ...
- [转]Web开发的发展史
之所以转这篇文章是因为它可以对web请求有大致的理解. 以下内容转自:http://www.open-open.com/news/view/19ed96a 英文原文: Full stack web d ...
- js判断手机系统和微信
//判断手机浏览器 var ua = navigator.userAgent; var ipad = ua.match(/(iPad).*OS\s([\d_]+)/), isIphone = !ipa ...
- 胡扯两句——CDQ分治
之前听大神讲过CDQ分治大概是个什么东西,但是一直还没有真正去搞过.今天稍微看了一下,写点自己的理解. 首先CDQ分治有两个条件. 条件1:可以分成两个独立互不影响的问题(这里的"独立&qu ...