• 自定义对话框[原创]


    创建一个窗体,属性Name为:MessageDialog ,属性ControlBox为:false,属性最大框,最小框为false;ShowIcon,ShowInTaskbar为false;
    其他可以根据自己爱好设置一些,如字体,字号,窗体形状等等。
    就不多说了,代码如下:
      1using System;
      2using System.Collections.Generic;
      3using System.ComponentModel;
      4using System.Data;
      5using System.Drawing;
      6using System.Text;
      7using System.Windows.Forms;
      8
      9namespace BOM.NewUI.Assistant
     10{
     11    public partial class MessageDialog : Form
     12    {
     13        public MessageDialog()
     14        {
     15            InitializeComponent();
     16        }
           
     17
     18        /// <summary>
     19        /// 显示消息对话框,自行全部信息指定全部信息。
     20        /// </summary>
     21        /// <param name="owner">父窗口</param>
     22        /// <param name="icon">显示的图标</param>
     23        /// <param name="text">信息内容</param>
     24        /// <param name="caption">对话框标题</param>
     25        /// <param name="buttonTypes">按钮类别数组</param>
     26        /// <param name="buttonLabels">按钮文字</param>
     27        /// <param name="defaultButton">缺省按钮</param>
     28        /// <returns>用户点击的按钮类型</returns>

     29        public static DialogResult Show(IWin32Window owner, MessageIcon icon, string text, string caption,
     30                                            DialogResult[] buttonTypes, string[] buttonLabels, DialogResult defaultButton)
     31        {
     32            MessageDialog dialog = new MessageDialog();
     33            using (dialog)
     34            {
     35                dialog.SetIcon(icon);
     36                dialog.SetText(text);
     37                dialog.setCaption(GetCaption(icon, caption));
     38                dialog.CreateButtons(buttonTypes, buttonLabels, defaultButton);
     39
     40                return dialog.ShowDialog(owner);
     41            }

     42        }

     43
     44        /// <summary>
     45        /// 显示信息提示对话框。
     46        /// </summary>
     47        /// <param name="owner">父窗口</param>
     48        /// <param name="text">信息内容</param>
     49        /// <param name="caption">对话框标题</param>
     50        /// <returns>用户点击的按钮类型</returns>

     51        public static DialogResult Show(IWin32Window owner, string text, string caption)
     52        {
     53            return Show(owner, MessageIcon.Information, text, caption);
     54        }

     55
     56        /// <summary>
     57        /// 根据图标类型显示对话框,按钮按照图标的类型设定。
     58        /// </summary>
     59        /// <param name="owner">父窗口</param>
     60        /// <param name="icon">图标类型</param>
     61        /// <param name="text">信息内容</param>
     62        /// <param name="caption">对话框标题</param>
     63        /// <returns>用户点击的按钮类型</returns>

     64        public static DialogResult Show(IWin32Window owner, MessageIcon icon, string text, string caption)
     65        {
     66            return Show(owner, icon, text, caption,
     67                         GetButtonTypes(icon), GetButtonLabels(icon),
     68                         GetDefaultButton(icon));
     69        }

     70
     71        /// <summary>
     72        /// 根据图标类型和按钮类型显示对话框。
     73        /// </summary>
     74        /// <param name="owner">父窗口</param>
     75        /// <param name="icon">图标类型</param>
     76        /// <param name="text">信息内容</param>
     77        /// <param name="caption">对话框标题</param>
     78        /// <param name="buttons">按钮类型,使用Windows预定义类型。</param>
     79        /// <returns></returns>

     80        public static DialogResult Show(IWin32Window owner, MessageIcon icon, string text, string caption,
     81                                        MessageBoxButtons buttons)
     82        {
     83            return Show(owner, icon, text, caption, buttons, GetDefaultButton(buttons));
     84        }

     85
     86        /// <summary>
     87        /// 根据图标类型和按钮类型显示对话框,自行指定缺省按钮。
     88        /// </summary>
     89        /// <param name="owner">父窗口</param>
     90        /// <param name="icon">图标类型</param>
     91        /// <param name="text">信息内容</param>
     92        /// <param name="caption">对话框标题</param>
     93        /// <param name="buttons">按钮类型,使用Windows预定义类型。</param>
     94        /// <param name="defaultButton">缺省按钮类型,点击Enter时触发</param>
     95        /// <returns>用户点击的按钮类型</returns>

     96        public static DialogResult Show(IWin32Window owner, MessageIcon icon, string text, string caption,
     97                                        MessageBoxButtons buttons, DialogResult defaultButton)
     98        {
     99            return Show(owner, icon, text, caption, buttons, GetButtonLabels(buttons), defaultButton);
    100        }

    101
    102        /// <summary>
    103        /// 根据图标类型和按钮类型显示对话框,自行指定按钮文字和缺省按钮。
    104        /// </summary>
    105        /// <param name="owner">父窗口</param>
    106        /// <param name="icon">图标类型</param>
    107        /// <param name="text">信息内容</param>
    108        /// <param name="caption">对话框标题</param>
    109        /// <param name="buttons">按钮类型,使用Windows预定义类型。</param>
    110        /// <param name="defaultButton">缺省按钮类型,点击Enter时触发</param>
    111        /// <param name="buttonLabels">按钮文字数组</param>
    112        /// <returns>用户点击的按钮类型</returns>

    113        public static DialogResult Show(IWin32Window owner, MessageIcon icon, string text, string caption,
    114                                        MessageBoxButtons buttons, string[] buttonLabels, DialogResult defaultButton)
    115        {
    116            return Show(owner, icon, text, caption, GetButtonTypes(buttons), buttonLabels, defaultButton);
    117        }

    118
    119
    120        private static DialogResult GetDefaultButton(MessageIcon icon)
    121        {
    122            switch (icon)
    123            {
    124                case MessageIcon.Question:
    125                    return DialogResult.No;
    126                case MessageIcon.Password:
    127                    return DialogResult.OK;
    128                case MessageIcon.Information:
    129                case MessageIcon.Warning:
    130                case MessageIcon.Error:
    131                case MessageIcon.Help:
    132                case MessageIcon.Locked:
    133                case MessageIcon.Shutdown:
    134                default:
    135                    return DialogResult.OK;
    136            }

    137        }

    138
    139        private static DialogResult GetDefaultButton(MessageBoxButtons buttons)
    140        {
    141            switch (buttons)
    142            {
    143                case MessageBoxButtons.YesNo:
    144                    return DialogResult.No;
    145                case MessageBoxButtons.OKCancel:
    146                    return DialogResult.Cancel;
    147                case MessageBoxButtons.OK:
    148                    return DialogResult.OK;
    149                case MessageBoxButtons.AbortRetryIgnore:
    150                    return DialogResult.Abort;
    151                case MessageBoxButtons.RetryCancel:
    152                    return DialogResult.Retry;
    153                case MessageBoxButtons.YesNoCancel:
    154                    return DialogResult.Cancel;
    155                default:
    156                    return DialogResult.OK;
    157            }

    158
    159        }

    160        /// <summary>
    161        /// button 标签
    162        /// </summary>
    163        /// <param name="type"></param>
    164        /// <returns></returns>

    165        private static string GetButtonLabel(DialogResult type)
    166        {
    167            switch (type)
    168            {
    169                case DialogResult.Abort:
    170                    return "中止";
    171                case DialogResult.Cancel:
    172                    return "取消";
    173                case DialogResult.Ignore:
    174                    return "忽略";
    175                case DialogResult.No:
    176                    return "";
    177                case DialogResult.OK:
    178                    return "确定";
    179                case DialogResult.Retry:
    180                    return "重试";
    181                case DialogResult.Yes:
    182                    return "";
    183                default:
    184                    return "";
    185            }

    186        }

    187
    188        private static string[] GetButtonLabels(MessageIcon icon)
    189        {
    190            DialogResult[] types = GetButtonTypes(icon);
    191            return GetButtonLabels(types);
    192        }

    193
    194        private static string[] GetButtonLabels(MessageBoxButtons buttons)
    195        {
    196            DialogResult[] types = GetButtonTypes(buttons);
    197            return GetButtonLabels(types);
    198        }

    199
    200        private static string[] GetButtonLabels(DialogResult[] types)
    201        {
    202            string[] labels = new string[types.Length];
    203            for (int i = 0; i < types.Length; i++)
    204            {
    205                labels[i] = GetButtonLabel(types[i]);
    206            }

    207
    208            return labels;
    209        }

    210
    211        private static DialogResult[] BUTTON_TYPES_ABORT_RETRY_CANCEL = new DialogResult[]
    212            {
    213                DialogResult.Abort,
    214                DialogResult.Retry,
    215                DialogResult.Ignore,
    216            }
    ;
    217
    218        private static DialogResult[] BUTTON_TYPES_OK = new DialogResult[]
    219            {
    220                DialogResult.OK,
    221            }
    ;
    222
    223        private static DialogResult[] BUTTON_TYPES_OK_CANCEL = new DialogResult[]
    224            {
    225                DialogResult.OK, DialogResult.Cancel,
    226            }
    ;
    227
    228        private static DialogResult[] BUTTON_TYPES_RETRY_CANCEL = new DialogResult[]
    229            {
    230                DialogResult.Retry, DialogResult.Cancel,
    231            }
    ;
    232
    233        private static DialogResult[] BUTTON_TYPES_YES_NO = new DialogResult[]
    234            {
    235                DialogResult.Yes, DialogResult.No,
    236            }
    ;
    237
    238        private static DialogResult[] BUTTON_TYPES_YES_NO_CANCEL = new DialogResult[]
    239            {
    240                DialogResult.Yes, DialogResult.No, DialogResult.Cancel,
    241            }
    ;
    242
    243        private static DialogResult[] GetButtonTypes(MessageIcon icon)
    244        {
    245            switch (icon)
    246            {
    247                case MessageIcon.Question:
    248                    return BUTTON_TYPES_YES_NO;
    249                case MessageIcon.Password:
    250                    return BUTTON_TYPES_OK_CANCEL;
    251                case MessageIcon.Information:
    252                case MessageIcon.Warning:
    253                case MessageIcon.Error:
    254                case MessageIcon.Help:
    255                case MessageIcon.Locked:
    256                case MessageIcon.Shutdown:
    257                default:
    258                    return BUTTON_TYPES_OK;
    259            }

    260        }

    261
    262
    263        private static DialogResult[] GetButtonTypes(MessageBoxButtons buttons)
    264        {
    265            switch (buttons)
    266            {
    267                case MessageBoxButtons.YesNo:
    268                    return BUTTON_TYPES_YES_NO;
    269                case MessageBoxButtons.OKCancel:
    270                    return BUTTON_TYPES_OK_CANCEL;
    271                case MessageBoxButtons.OK:
    272                    return BUTTON_TYPES_OK;
    273                case MessageBoxButtons.AbortRetryIgnore:
    274                    return BUTTON_TYPES_ABORT_RETRY_CANCEL;
    275                case MessageBoxButtons.RetryCancel:
    276                    return BUTTON_TYPES_RETRY_CANCEL;
    277                case MessageBoxButtons.YesNoCancel:
    278                    return BUTTON_TYPES_YES_NO_CANCEL;
    279                default:
    280                    return BUTTON_TYPES_OK;
    281            }

    282        }

    283
    284
    285        private static string[] CAPTIONS = new string[]
    286            {
    287                "提示",
    288                "请确认操作",
    289                "警告",
    290                "错误",
    291                "操作中止",
    292                "帮助信息",
    293                "已锁定",
    294                "安全信息",
    295                "系统关闭"
    296            }
    ;
    297
    298        private static string GetCaption(MessageIcon icon, string caption)
    299        {
    300            if (!string.IsNullOrEmpty(caption))
    301                return caption;
    302
    303            return CAPTIONS[(int)icon];
    304        }

    305
    306
    307        private void SetIcon(MessageIcon icon)
    308        {
    309            iconBox.Image = iconList.Images[(int)icon];
    310        }

    311
    312        private void SetText(string text)
    313        {
    314            textLabel.Text = text;
    315        }

    316
    317        private void setCaption(string caption)
    318        {
    319            Text = caption;
    320        }

    321
    322        private const int BUTTON_POSITION_Y = 230;
    323        private const int BUTTON_GAP = 40;
    324        private static Size BUTTON_SIZE = new Size(10030);
    325
    326        /// <summary>
    327        /// 创建Button。
    328        /// </summary>
    329        /// <param name="types"></param>
    330        /// <param name="labels"></param>
    331        /// <param name="dft"></param>

    332        private void CreateButtons(DialogResult[] types, string[] labels, DialogResult dft)
    333        {
    334            int count = types.Length;
    335            int x = (Size.Width - (count * BUTTON_SIZE.Width + (count - 1* BUTTON_GAP)) / 2;
    336            for (int i = 0; i < types.Length; i++)
    337            {
    338                DialogResult type = types[i];
    339                Button button = new Button();
    340
    341                button.Location = new Point(x + i * (BUTTON_SIZE.Width + BUTTON_GAP), BUTTON_POSITION_Y);
    342                button.Size = BUTTON_SIZE;
    343                button.DialogResult = type;
    344                button.Text = labels[i];
    345                Controls.Add(button);
    346
    347                if (type == dft)
    348                {
    349                    AcceptButton = button;
    350                }

    351            }

    352        }

    353    }

    354
    355
    356    /// <summary>
    357    /// 用于枚举消息对话框使用的图标。
    358    /// </summary>

    359    public enum MessageIcon : int
    360    {
    361        /// <summary>
    362        /// 提示信息。
    363        /// </summary>

    364        Information = 0,
    365        /// <summary>
    366        /// 需要用户确认。
    367        /// </summary>

    368        Question = 1,
    369        /// <summary>
    370        /// 警告信息。
    371        /// </summary>

    372        Warning = 2,
    373        /// <summary>
    374        /// 错误信息。
    375        /// </summary>

    376        Error = 3,
    377        /// <summary>
    378        /// 操作终止,或被禁止的提示信息。
    379        /// </summary>

    380        Stop = 4,
    381        /// <summary>
    382        /// 帮助信息。
    383        /// </summary>

    384        Help = 5,
    385        /// <summary>
    386        /// 已锁定信息。
    387        /// </summary>

    388        Locked = 6,
    389        /// <summary>
    390        /// 密码,安全相关信息。
    391        /// </summary>

    392        Password = 7,
    393        /// <summary>
    394        /// 关闭提示信息。
    395        /// </summary>

    396        Shutdown = 8
    397    }

    398}

    使用时可如下方式:
     MessageDialog.Show(this, MessageIcon.Question, "中国*****技术服务公司", "提示信息", MessageBoxButtons.YesNo);
                MessageDialog.Show(this, MessageIcon.Locked, "中国*****技术服务公司", "提示信息", MessageBoxButtons.YesNo);
                MessageDialog.Show(this, MessageIcon.Shutdown, "中国*****技术服务公司", "提示信息", MessageBoxButtons.YesNo);
                MessageDialog.Show(this, MessageIcon.Stop, "中国*****技术服务公司", "提示信息", MessageBoxButtons.YesNo);
                MessageDialog.Show(this, MessageIcon.Help, "中国*****技术服务公司", "提示信息", MessageBoxButtons.YesNo);
  • 相关阅读:
    XHTML学习笔记 Part3:核心属性
    XHTML学习笔记 Part2:核心元素
    XHTML学习笔记 part1
    北航非全日制-软件学院考研攻略(经验仅来自于2019年,2020年招生简章有变动,需谨慎)
    为什么能抓到网站https传输的明文密码?------顺便说说“知乎”和“支付宝”的安全性对比
    JetBrain系列学生免费授权
    印象笔记模板推荐使用
    测试用例评审总结与规范
    Django入门
    Django在根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'
  • 原文地址:https://www.cnblogs.com/winnxm/p/918408.html
Copyright © 2020-2023  润新知