在软件开发中,很多地方需要用到与用户消息提醒,用form绘制一个自己消息框。

首先在界面上绘制两个按钮,在之前文章有教程绘制一个button方法,也可以直接使用系统。

私有属性

        #region 私有属性        private string message;        private MesBoxIcon mesIcon;        #endregion

公有属性

        #region 公有属性        public MesBoxIcon MesIcon        {            get => mesIcon;            set            {                mesIcon = value;                this.Invalidate();                if (value == MesBoxIcon.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 =(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

MesBoxIcon 消息类型选择

找到与自己需要绘制的图档

        public enum MesBoxIcon        {            Asterisk,            Error,            Info,            Warning,        }

采用GDI绘制消息框

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;            g.DrawString(Message, Font, new SolidBrush(this.ForeColor), recStr, WenSkin.Controls.ControlHelper.StringConters);            switch (MesIcon)            {                case MesBoxIcon.Asterisk:                    g.DrawImage(Properties.Resources.Asterisk, recIco);                    break;                case MesBoxIcon.Error:                    g.DrawImage(Properties.Resources.error, recIco);                    break;                case MesBoxIcon.Info:                    g.DrawImage(Properties.Resources.Info, recIco);                    break;                case MesBoxIcon.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;        }

可以根据自己需求更改。

多个构造函数示例

        public MesBox()        {            InitializeComponent();            this.SizeChanged += (s, e) =>            {                if (wenImageButton1 != null)                    wenImageButton1.Width = (this.Width - this.FrameWidth * 2) / 2;            };            Text = "消息";            mesIcon = MesBoxIcon.Info;            this.StartPosition = FormStartPosition.CenterScreen;        }        public MesBox(string text) : this()        {            Message = text;        }        public MesBox(string text,MesBoxIcon mesBoxIcon) : this(text)        {            MesIcon = mesBoxIcon;            switch (MesIcon)            {                case MesBoxIcon.Asterisk:                    Text = "提醒";                    break;                case MesBoxIcon.Error:                    Text = "错误";                    break;                case MesBoxIcon.Info:                    Text = "消息";                    break;                case MesBoxIcon.Warning:                    Text = "警告";                    break;                default:                    break;            }        }        public MesBox(string text,string caption, MesBoxIcon mesBoxIcon) : this(text)        {            Text = caption;        }

至此,一个自主弹窗绘制完成

接下来调用

            var m = new MesBox(text, MesBox.MesBoxIcon.Asterisk).ShowDialog();            if (m == DialogResult.OK)                 true;            else                 false;

一行代码即可,是不是很方便。

关注文林软控,带你一起C# 美化.NET 控件。

c# dialogresult 选择文件_C#控件美化之路(12):自定义消息弹出框相关推荐

  1. form 窗体增加边框_C#控件美化之路(13):美化Form窗口(上)

    在开发中最重要的就是美化form窗口,在开发中,大多都是用会用自主美化的窗口开发程序. 本文只是点多,分为上中下节.分段讲解. 本文主要讲解窗口美化关键步骤. 首先美化窗体,就需要自己绘制最大化 最小 ...

  2. C#控件美化之路(12):c# dialogresult 选择文件_自定义消息弹出框

    在软件开发中,很多地方需要用到与用户消息提醒,用form绘制一个自己消息框. 首先在界面上绘制两个按钮,在之前文章有教程绘制一个button方法,也可以直接使用系统. 私有属性 #region 私有属 ...

  3. html选择文件夹控件,File文件控件,选中文件(图片,flash,视频)即立即预览显示

    我们平常用file文件控件上传文件,要预览有时会刷新页面,结果file控件被清空,好多人问能能让他不清空或重新赋值,因为处于安全性的考虑,这是不可能的.那怎么进行无刷新预览呢?这里我把我所使用的方法写 ...

  4. c# dialogresult 选择文件_C#实战037:一个简单的入门应用程序NXPlug install

    前面通过一系列的NX二次开发已经基本完成了项目对NX的需求了,接着就是将插件打包给用户使用了.使用过程很简单只要将文件拷贝至任意目录并添加环境变量UGII_USER_DIR即可,为了方便一般都会放在N ...

  5. android 弹出键盘 底部控件上移,如何设置底部控件view随着软键盘的弹出而上移...

    1. 概述 在开发中,我们可能会遇到一个常见的效果,就是点击EditText输入框,软键盘随着EditText输入框同时上移,实现方式如下: 给EditText 外层添加一个 ScrollView,然 ...

  6. 基于js的一个日历控件,点击按钮,弹出日历,显示日期到文本框

    首先是一些js代码: <Script LANGUAGE="JavaScript"> var months = new Array("一", &quo ...

  7. C# 高仿腾讯QQ (TextBox控件美化)(附源码)

    接上一篇<C# 高仿腾讯QQ (Bottom控件美化) > 这篇来说一下QQ皮肤TextBox控件的美化: (1).已修正 每次窗口最小化以后再还原会发现窗口底部往下移了几十个像素(但还不 ...

  8. WinForm-ListBox控件美化

    这是本人原创的Listbox美化效果 https://blog.csdn.net/mosangbike/article/details/84340615 以下是转发文章: WinForm-ListBo ...

  9. Android控件美化Shape

    Android控件美化Shape你会用吗?   -- 未审核 编辑文档  如果你对Android系统自带的UI控件感觉不够满意,可以尝试下自定义控件,我们就以Button为例,很早以前Android1 ...

  10. android 代码 shape,Android Shape控件美化实现代码

    如果你对Android系统自带的UI控件感觉不够满意,可以尝试下自定义控件,我们就以Button为例,很早以前Android123就写到过Android Button按钮控件美化方法里面提到了xml的 ...

最新文章

  1. 计算机网络管理云红艳电子版,计算机网络管理pdf
  2. SQL中truncate table和delete的区别
  3. OSI分层和五层协议
  4. Java关于 class类的基础方法
  5. linux哪个系统能编译固件,rk3328编译Linux固件
  6. 打擦边球,涨粉1700万!中国最“不正经”的官媒,比杜蕾斯还会玩
  7. Kudu 使用注意点
  8. docker容器内存和CPU使用限制
  9. [Java][Servlet] Failed to destroy end point associated with ProtocolHandler [http-nio-8080]
  10. 程序员面试金典——9.6合法序号序列判断
  11. 状态压缩DP 图文详解(一)
  12. android自定义壁纸制作,如何为Android制作自己的自定义壁纸 | MOS86
  13. 一图搞清楚SRE的工作内容
  14. Vue 改变数据,页面不刷新的问题
  15. 数字图像处理实验四对比度增强
  16. python用函数对列表删除_关于python:如何使用range()函数从列表中删除项目时迭代列表?...
  17. SpaceSniffer 磁盘清理软件 windows
  18. hc sr501 c语言程序,HC-SR501人体红外感应模块资料汇总(原理图、常见问题、程序等)...
  19. 物联网开发笔记(48)- 使用Micropython开发ESP32开发板之控制OLED ssd1306屏幕
  20. 字库软件-字模III

热门文章

  1. php加载memcache模块
  2. [数据集]新浪微博数据集MicroblogPCU
  3. vue的自定义指令的坑
  4. 写了个项目 Web-Rtmp: 使用 WebSocket 在网页上播放 RTMP 直播流
  5. 什么是字节 什么是数据包
  6. Delphi程序结构
  7. eclipse 点击 ctrl+鼠标左键看不了源码问题解决
  8. 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。...
  9. windows 10 l2tp 连接无响应问题解决
  10. 总结:常用的 Python 爬虫技巧