• (二十一)c#Winform自定义控件-气泡提示-HZHControls


    官网

    http://www.hzhcontrols.com

    前提

    入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。

    GitHub:https://github.com/kwwwvagaa/NetWinformControl

    码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git

    如果觉得写的还行,请点个 star 支持一下吧

    欢迎前来交流探讨: 企鹅群568015492 企鹅群568015492

    目录

    https://www.cnblogs.com/bfyx/p/11364884.html

    准备工作

    这个窗体继承子基类窗体FrmBase,如果你对FrmBase还不了解,请移步 (十七)c#Winform自定义控件-基类窗体 查看

    气泡需要支持多个位置显示,也就是说四面八方都可以显示,并且支持样式,自定义大小,另外具有内置的4中模式(成功,错误,警告,正常)

    开始

    定义一些枚举

     1  public enum TipsSizeMode
     2     {
     3         Small,
     4         Medium,
     5         Large,
     6         None
     7     }
     8     public enum TipsState
     9     {
    10         Default = -1,
    11         Success = -6566849,
    12         Info = -12477983,
    13         Warning = -357816,
    14         Error = -1097849
    15     }

    添加Form,命名FrmTips,继承自FrmBase

    属性

     1  private ContentAlignment m_showAlign = ContentAlignment.BottomLeft;
     2 
     3         /// <summary>
     4         /// 显示位置
     5         /// </summary>
     6         public ContentAlignment ShowAlign
     7         {
     8             get { return m_showAlign; }
     9             set { m_showAlign = value; }
    10         }
    11 
    12         private static List<FrmTips> m_lstTips = new List<FrmTips>();
    13 
    14         private int m_CloseTime = 0;
    15 
    16         public int CloseTime
    17         {
    18             get { return m_CloseTime; }
    19             set
    20             {
    21                 m_CloseTime = value;
    22                 if (value > 0)
    23                     timer1.Interval = value;
    24             }
    25         }

    提供一些公共函数

     1    #region 清理提示框
     2         /// <summary>
     3         /// 功能描述:清理提示框
     4         /// 作  者:HZH
     5         /// 创建日期:2019-02-28 15:11:03
     6         /// 任务编号:POS
     7         /// </summary>
     8         public static void ClearTips()
     9         {
    10             for (int i = m_lstTips.Count - 1; i >= 0; i--)
    11             {
    12                 FrmTips current = m_lstTips[i];
    13                 if (!current.IsDisposed)
    14                 {
    15                     current.Close();
    16                     current.Dispose();
    17                 }
    18             }
    19             m_lstTips.Clear();
    20         }
    21         #endregion
    22  
    23         /// <summary>
    24         /// 重置倒计时
    25         /// </summary>
    26         public void ResetTimer()
    27         {
    28             if (m_CloseTime > 0)
    29             {
    30                 timer1.Enabled = false;
    31                 timer1.Enabled = true;
    32             }
    33         }

    提供的静态函数

      1         #region 清理提示框
      2         /// <summary>
      3         /// 功能描述:清理提示框
      4         /// 作  者:HZH
      5         /// 创建日期:2019-02-28 15:11:03
      6         /// 任务编号:POS
      7         /// </summary>
      8         public static void ClearTips()
      9         {
     10             for (int i = m_lstTips.Count - 1; i >= 0; i--)
     11             {
     12                 FrmTips current = m_lstTips[i];
     13                 if (!current.IsDisposed)
     14                 {
     15                     current.Close();
     16                     current.Dispose();
     17                 }
     18             }
     19             m_lstTips.Clear();
     20         }
     21         #endregion
     22 
     23   
     24         private static KeyValuePair<string, FrmTips> m_lastTips = new KeyValuePair<string, FrmTips>();
     25 
     26         public static FrmTips ShowTips(
     27             Form frm,
     28             string strMsg,
     29             int intAutoColseTime = 0,
     30             bool blnShowCoseBtn = true,
     31             ContentAlignment align = ContentAlignment.BottomLeft,
     32             Point? point = null,
     33             TipsSizeMode mode = TipsSizeMode.Small,
     34             Size? size = null,
     35             TipsState state = TipsState.Default)
     36         {
     37 
     38             if (m_lastTips.Key == strMsg + state && !m_lastTips.Value.IsDisposed && m_lastTips.Value.Visible)
     39             {
     40                 m_lastTips.Value.ResetTimer();
     41                 return m_lastTips.Value;
     42             }
     43             else
     44             {
     45                 FrmTips frmTips = new FrmTips();
     46                 switch (mode)
     47                 {
     48                     case TipsSizeMode.Small:
     49                         frmTips.Size = new Size(350, 35);
     50                         break;
     51                     case TipsSizeMode.Medium:
     52                         frmTips.Size = new Size(350, 50);
     53                         break;
     54                     case TipsSizeMode.Large:
     55                         frmTips.Size = new Size(350, 65);
     56                         break;
     57                     case TipsSizeMode.None:
     58                         if (!size.HasValue)
     59                         {
     60                             frmTips.Size = new Size(350, 35);
     61                         }
     62                         else
     63                         {
     64                             frmTips.Size = size.Value;
     65                         }
     66                         break;
     67                 }
     68                 frmTips.BackColor = Color.FromArgb((int)state);
     69 
     70                 if (state == TipsState.Default)
     71                 {
     72                     frmTips.lblMsg.ForeColor = SystemColors.ControlText;
     73                 }
     74                 else
     75                 {
     76                     frmTips.lblMsg.ForeColor = Color.White;
     77                 }
     78                 switch (state)
     79                 {
     80                     case TipsState.Default:
     81                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.alarm;
     82                         break;
     83                     case TipsState.Success:
     84                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.success;
     85                         break;
     86                     case TipsState.Info:
     87                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.alarm;
     88                         break;
     89                     case TipsState.Warning:
     90                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.warning;
     91                         break;
     92                     case TipsState.Error:
     93                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.error;
     94                         break;
     95                     default:
     96                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.alarm;
     97                         break;
     98                 }
     99 
    100                 frmTips.lblMsg.Text = strMsg;
    101                 frmTips.CloseTime = intAutoColseTime;
    102                 frmTips.btnClose.Visible = blnShowCoseBtn;
    103 
    104 
    105                 frmTips.ShowAlign = align;
    106                 frmTips.Owner = frm;
    107                 FrmTips.m_lstTips.Add(frmTips);
    108                 FrmTips.ReshowTips();
    109                 frmTips.Show(frm);
    110                 if (frm != null && !frm.IsDisposed)
    111                 {
    112                     ControlHelper.SetForegroundWindow(frm.Handle);
    113                 }
    114                 //frmTips.BringToFront();
    115                 m_lastTips = new KeyValuePair<string, FrmTips>(strMsg + state, frmTips);
    116                 return frmTips;
    117             }
    118         }
    119 
    120         #region 刷新显示
    121         /// <summary>
    122         /// 功能描述:刷新显示
    123         /// 作  者:HZH
    124         /// 创建日期:2019-02-28 15:33:06
    125         /// 任务编号:POS
    126         /// </summary>
    127         public static void ReshowTips()
    128         {
    129             lock (FrmTips.m_lstTips)
    130             {
    131                 FrmTips.m_lstTips.RemoveAll(p => p.IsDisposed == true);
    132                 var enumerable = from p in FrmTips.m_lstTips
    133                                  group p by new
    134                                  {
    135                                      p.ShowAlign
    136                                  };
    137                 Size size = Screen.PrimaryScreen.Bounds.Size;
    138                 foreach (var item in enumerable)
    139                 {
    140                     List<FrmTips> list = FrmTips.m_lstTips.FindAll((FrmTips p) => p.ShowAlign == item.Key.ShowAlign);
    141                     for (int i = 0; i < list.Count; i++)
    142                     {
    143                         FrmTips frmTips = list[i];
    144                         if (frmTips.InvokeRequired)
    145                         {
    146                             frmTips.BeginInvoke(new MethodInvoker(delegate()
    147                             {
    148                                 switch (item.Key.ShowAlign)
    149                                 {
    150                                     case ContentAlignment.BottomCenter:
    151                                         frmTips.Location = new Point((size.Width - frmTips.Width) / 2, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    152                                         break;
    153                                     case ContentAlignment.BottomLeft:
    154                                         frmTips.Location = new Point(10, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    155                                         break;
    156                                     case ContentAlignment.BottomRight:
    157                                         frmTips.Location = new Point(size.Width - frmTips.Width - 10, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    158                                         break;
    159                                     case ContentAlignment.MiddleCenter:
    160                                         frmTips.Location = new Point((size.Width - frmTips.Width) / 2, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    161                                         break;
    162                                     case ContentAlignment.MiddleLeft:
    163                                         frmTips.Location = new Point(10, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    164                                         break;
    165                                     case ContentAlignment.MiddleRight:
    166                                         frmTips.Location = new Point(size.Width - frmTips.Width - 10, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    167                                         break;
    168                                     case ContentAlignment.TopCenter:
    169                                         frmTips.Location = new Point((size.Width - frmTips.Width) / 2, 10 + (i + 1) * (frmTips.Height + 10));
    170                                         break;
    171                                     case ContentAlignment.TopLeft:
    172                                         frmTips.Location = new Point(10, 10 + (i + 1) * (frmTips.Height + 10));
    173                                         break;
    174                                     case ContentAlignment.TopRight:
    175                                         frmTips.Location = new Point(size.Width - frmTips.Width - 10, 10 + (i + 1) * (frmTips.Height + 10));
    176                                         break;
    177                                     default:
    178                                         break;
    179                                 }
    180                             }));
    181                         }
    182                         else
    183                         {
    184                             switch (item.Key.ShowAlign)
    185                             {
    186                                 case ContentAlignment.BottomCenter:
    187                                     frmTips.Location = new Point((size.Width - frmTips.Width) / 2, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    188                                     break;
    189                                 case ContentAlignment.BottomLeft:
    190                                     frmTips.Location = new Point(10, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    191                                     break;
    192                                 case ContentAlignment.BottomRight:
    193                                     frmTips.Location = new Point(size.Width - frmTips.Width - 10, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    194                                     break;
    195                                 case ContentAlignment.MiddleCenter:
    196                                     frmTips.Location = new Point((size.Width - frmTips.Width) / 2, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    197                                     break;
    198                                 case ContentAlignment.MiddleLeft:
    199                                     frmTips.Location = new Point(10, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    200                                     break;
    201                                 case ContentAlignment.MiddleRight:
    202                                     frmTips.Location = new Point(size.Width - frmTips.Width - 10, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    203                                     break;
    204                                 case ContentAlignment.TopCenter:
    205                                     frmTips.Location = new Point((size.Width - frmTips.Width) / 2, 10 + (i + 1) * (frmTips.Height + 10));
    206                                     break;
    207                                 case ContentAlignment.TopLeft:
    208                                     frmTips.Location = new Point(10, 10 + (i + 1) * (frmTips.Height + 10));
    209                                     break;
    210                                 case ContentAlignment.TopRight:
    211                                     frmTips.Location = new Point(size.Width - frmTips.Width - 10, 10 + (i + 1) * (frmTips.Height + 10));
    212                                     break;
    213                                 default:
    214                                     break;
    215                             }
    216                         }
    217 
    218                     }
    219                 }
    220             }
    221         }
    222         #endregion
    223 
    224 public static FrmTips ShowTipsSuccess(Form frm, string strMsg)
    225         {
    226             return FrmTips.ShowTips(frm, strMsg, 3000, false, ContentAlignment.BottomCenter, null, TipsSizeMode.Large, null, TipsState.Success);
    227         }
    228 
    229         public static FrmTips ShowTipsError(Form frm, string strMsg)
    230         {
    231             return FrmTips.ShowTips(frm, strMsg, 3000, false, ContentAlignment.BottomCenter, null, TipsSizeMode.Large, null, TipsState.Error);
    232         }
    233 
    234         public static FrmTips ShowTipsInfo(Form frm, string strMsg)
    235         {
    236             return FrmTips.ShowTips(frm, strMsg, 3000, false, ContentAlignment.BottomCenter, null, TipsSizeMode.Large, null, TipsState.Info);
    237         }
    238         public static FrmTips ShowTipsWarning(Form frm, string strMsg)
    239         {
    240             return FrmTips.ShowTips(frm, strMsg, 3000, false, ContentAlignment.BottomCenter, null, TipsSizeMode.Large, null, TipsState.Warning);
    241         }

    一些事件处理

     1  private void FrmTips_FormClosing(object sender, FormClosingEventArgs e)
     2         {
     3             if (m_lastTips.Value == this)
     4                 m_lastTips = new KeyValuePair<string, FrmTips>();
     5             m_lstTips.Remove(this);
     6             ReshowTips();
     7 
     8             for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
     9             {
    10                 if (Application.OpenForms[i].IsDisposed || !Application.OpenForms[i].Visible || Application.OpenForms[i] is FrmTips)
    11                 {
    12                     continue;
    13                 }
    14                 else
    15                 {
    16                     Timer t = new Timer();
    17                     t.Interval = 100;
    18                     var frm = Application.OpenForms[i];
    19                     t.Tick += (a, b) =>
    20                     {
    21                         t.Enabled = false;
    22                         if (!frm.IsDisposed)
    23                             ControlHelper.SetForegroundWindow(frm.Handle);
    24                     };
    25                     t.Enabled = true;
    26                     break;
    27                 }
    28             }
    29         }
    30 
    31         private void FrmTips_Load(object sender, EventArgs e)
    32         {
    33             if (m_CloseTime > 0)
    34             {
    35                 this.timer1.Interval = m_CloseTime;
    36                 this.timer1.Enabled = true;
    37             }
    38         }
    39 
    40         private void timer1_Tick(object sender, EventArgs e)
    41         {
    42             this.timer1.Enabled = false;
    43             this.Close();
    44         }
    45 
    46         private void btnClose_MouseDown(object sender, MouseEventArgs e)
    47         {
    48             this.timer1.Enabled = false;
    49             this.Close();
    50         }
    51   private void FrmTips_FormClosed(object sender, FormClosedEventArgs e)
    52         {
    53             this.Dispose();
    54             GC.Collect();
    55         }

    最后看一下完整代码

      1 // 版权所有  黄正辉  交流群:568015492   QQ:623128629
      2 // 文件名称:FrmTips.cs
      3 // 创建日期:2019-08-15 16:04:54
      4 // 功能描述:FrmTips
      5 // 项目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control
      6 using System;
      7 using System.Collections.Generic;
      8 using System.ComponentModel;
      9 using System.Data;
     10 using System.Drawing;
     11 using System.Linq;
     12 using System.Text;
     13 using System.Windows.Forms;
     14 
     15 namespace HZH_Controls.Forms
     16 {
     17     public partial class FrmTips : FrmBase
     18     {
     19         private ContentAlignment m_showAlign = ContentAlignment.BottomLeft;
     20 
     21         /// <summary>
     22         /// 显示位置
     23         /// </summary>
     24         public ContentAlignment ShowAlign
     25         {
     26             get { return m_showAlign; }
     27             set { m_showAlign = value; }
     28         }
     29 
     30         private static List<FrmTips> m_lstTips = new List<FrmTips>();
     31 
     32         private int m_CloseTime = 0;
     33 
     34         public int CloseTime
     35         {
     36             get { return m_CloseTime; }
     37             set
     38             {
     39                 m_CloseTime = value;
     40                 if (value > 0)
     41                     timer1.Interval = value;
     42             }
     43         }
     44 
     45         public FrmTips()
     46         {
     47             base.SetStyle(ControlStyles.UserPaint, true);
     48             base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
     49             base.SetStyle(ControlStyles.DoubleBuffer, true);
     50             InitializeComponent();
     51         }
     52 
     53         #region 清理提示框
     54         /// <summary>
     55         /// 功能描述:清理提示框
     56         /// 作  者:HZH
     57         /// 创建日期:2019-02-28 15:11:03
     58         /// 任务编号:POS
     59         /// </summary>
     60         public static void ClearTips()
     61         {
     62             for (int i = m_lstTips.Count - 1; i >= 0; i--)
     63             {
     64                 FrmTips current = m_lstTips[i];
     65                 if (!current.IsDisposed)
     66                 {
     67                     current.Close();
     68                     current.Dispose();
     69                 }
     70             }
     71             m_lstTips.Clear();
     72         }
     73         #endregion
     74 
     75         /// <summary>
     76         /// 重置倒计时
     77         /// </summary>
     78         public void ResetTimer()
     79         {
     80             if (m_CloseTime > 0)
     81             {
     82                 timer1.Enabled = false;
     83                 timer1.Enabled = true;
     84             }
     85         }
     86         private static KeyValuePair<string, FrmTips> m_lastTips = new KeyValuePair<string, FrmTips>();
     87 
     88         public static FrmTips ShowTips(
     89             Form frm,
     90             string strMsg,
     91             int intAutoColseTime = 0,
     92             bool blnShowCoseBtn = true,
     93             ContentAlignment align = ContentAlignment.BottomLeft,
     94             Point? point = null,
     95             TipsSizeMode mode = TipsSizeMode.Small,
     96             Size? size = null,
     97             TipsState state = TipsState.Default)
     98         {
     99 
    100             if (m_lastTips.Key == strMsg + state && !m_lastTips.Value.IsDisposed && m_lastTips.Value.Visible)
    101             {
    102                 m_lastTips.Value.ResetTimer();
    103                 return m_lastTips.Value;
    104             }
    105             else
    106             {
    107                 FrmTips frmTips = new FrmTips();
    108                 switch (mode)
    109                 {
    110                     case TipsSizeMode.Small:
    111                         frmTips.Size = new Size(350, 35);
    112                         break;
    113                     case TipsSizeMode.Medium:
    114                         frmTips.Size = new Size(350, 50);
    115                         break;
    116                     case TipsSizeMode.Large:
    117                         frmTips.Size = new Size(350, 65);
    118                         break;
    119                     case TipsSizeMode.None:
    120                         if (!size.HasValue)
    121                         {
    122                             frmTips.Size = new Size(350, 35);
    123                         }
    124                         else
    125                         {
    126                             frmTips.Size = size.Value;
    127                         }
    128                         break;
    129                 }
    130                 frmTips.BackColor = Color.FromArgb((int)state);
    131 
    132                 if (state == TipsState.Default)
    133                 {
    134                     frmTips.lblMsg.ForeColor = SystemColors.ControlText;
    135                 }
    136                 else
    137                 {
    138                     frmTips.lblMsg.ForeColor = Color.White;
    139                 }
    140                 switch (state)
    141                 {
    142                     case TipsState.Default:
    143                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.alarm;
    144                         break;
    145                     case TipsState.Success:
    146                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.success;
    147                         break;
    148                     case TipsState.Info:
    149                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.alarm;
    150                         break;
    151                     case TipsState.Warning:
    152                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.warning;
    153                         break;
    154                     case TipsState.Error:
    155                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.error;
    156                         break;
    157                     default:
    158                         frmTips.pctStat.Image = HZH_Controls.Properties.Resources.alarm;
    159                         break;
    160                 }
    161 
    162                 frmTips.lblMsg.Text = strMsg;
    163                 frmTips.CloseTime = intAutoColseTime;
    164                 frmTips.btnClose.Visible = blnShowCoseBtn;
    165 
    166 
    167                 frmTips.ShowAlign = align;
    168                 frmTips.Owner = frm;
    169                 FrmTips.m_lstTips.Add(frmTips);
    170                 FrmTips.ReshowTips();
    171                 frmTips.Show(frm);
    172                 if (frm != null && !frm.IsDisposed)
    173                 {
    174                     ControlHelper.SetForegroundWindow(frm.Handle);
    175                 }
    176                 //frmTips.BringToFront();
    177                 m_lastTips = new KeyValuePair<string, FrmTips>(strMsg + state, frmTips);
    178                 return frmTips;
    179             }
    180         }
    181 
    182         #region 刷新显示
    183         /// <summary>
    184         /// 功能描述:刷新显示
    185         /// 作  者:HZH
    186         /// 创建日期:2019-02-28 15:33:06
    187         /// 任务编号:POS
    188         /// </summary>
    189         public static void ReshowTips()
    190         {
    191             lock (FrmTips.m_lstTips)
    192             {
    193                 FrmTips.m_lstTips.RemoveAll(p => p.IsDisposed == true);
    194                 var enumerable = from p in FrmTips.m_lstTips
    195                                  group p by new
    196                                  {
    197                                      p.ShowAlign
    198                                  };
    199                 Size size = Screen.PrimaryScreen.Bounds.Size;
    200                 foreach (var item in enumerable)
    201                 {
    202                     List<FrmTips> list = FrmTips.m_lstTips.FindAll((FrmTips p) => p.ShowAlign == item.Key.ShowAlign);
    203                     for (int i = 0; i < list.Count; i++)
    204                     {
    205                         FrmTips frmTips = list[i];
    206                         if (frmTips.InvokeRequired)
    207                         {
    208                             frmTips.BeginInvoke(new MethodInvoker(delegate()
    209                             {
    210                                 switch (item.Key.ShowAlign)
    211                                 {
    212                                     case ContentAlignment.BottomCenter:
    213                                         frmTips.Location = new Point((size.Width - frmTips.Width) / 2, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    214                                         break;
    215                                     case ContentAlignment.BottomLeft:
    216                                         frmTips.Location = new Point(10, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    217                                         break;
    218                                     case ContentAlignment.BottomRight:
    219                                         frmTips.Location = new Point(size.Width - frmTips.Width - 10, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    220                                         break;
    221                                     case ContentAlignment.MiddleCenter:
    222                                         frmTips.Location = new Point((size.Width - frmTips.Width) / 2, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    223                                         break;
    224                                     case ContentAlignment.MiddleLeft:
    225                                         frmTips.Location = new Point(10, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    226                                         break;
    227                                     case ContentAlignment.MiddleRight:
    228                                         frmTips.Location = new Point(size.Width - frmTips.Width - 10, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    229                                         break;
    230                                     case ContentAlignment.TopCenter:
    231                                         frmTips.Location = new Point((size.Width - frmTips.Width) / 2, 10 + (i + 1) * (frmTips.Height + 10));
    232                                         break;
    233                                     case ContentAlignment.TopLeft:
    234                                         frmTips.Location = new Point(10, 10 + (i + 1) * (frmTips.Height + 10));
    235                                         break;
    236                                     case ContentAlignment.TopRight:
    237                                         frmTips.Location = new Point(size.Width - frmTips.Width - 10, 10 + (i + 1) * (frmTips.Height + 10));
    238                                         break;
    239                                     default:
    240                                         break;
    241                                 }
    242                             }));
    243                         }
    244                         else
    245                         {
    246                             switch (item.Key.ShowAlign)
    247                             {
    248                                 case ContentAlignment.BottomCenter:
    249                                     frmTips.Location = new Point((size.Width - frmTips.Width) / 2, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    250                                     break;
    251                                 case ContentAlignment.BottomLeft:
    252                                     frmTips.Location = new Point(10, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    253                                     break;
    254                                 case ContentAlignment.BottomRight:
    255                                     frmTips.Location = new Point(size.Width - frmTips.Width - 10, size.Height - 100 - (i + 1) * (frmTips.Height + 10));
    256                                     break;
    257                                 case ContentAlignment.MiddleCenter:
    258                                     frmTips.Location = new Point((size.Width - frmTips.Width) / 2, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    259                                     break;
    260                                 case ContentAlignment.MiddleLeft:
    261                                     frmTips.Location = new Point(10, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    262                                     break;
    263                                 case ContentAlignment.MiddleRight:
    264                                     frmTips.Location = new Point(size.Width - frmTips.Width - 10, size.Height - (size.Height - list.Count * (frmTips.Height + 10)) / 2 - (i + 1) * (frmTips.Height + 10));
    265                                     break;
    266                                 case ContentAlignment.TopCenter:
    267                                     frmTips.Location = new Point((size.Width - frmTips.Width) / 2, 10 + (i + 1) * (frmTips.Height + 10));
    268                                     break;
    269                                 case ContentAlignment.TopLeft:
    270                                     frmTips.Location = new Point(10, 10 + (i + 1) * (frmTips.Height + 10));
    271                                     break;
    272                                 case ContentAlignment.TopRight:
    273                                     frmTips.Location = new Point(size.Width - frmTips.Width - 10, 10 + (i + 1) * (frmTips.Height + 10));
    274                                     break;
    275                                 default:
    276                                     break;
    277                             }
    278                         }
    279 
    280                     }
    281                 }
    282             }
    283         }
    284         #endregion
    285 
    286         private void FrmTips_FormClosing(object sender, FormClosingEventArgs e)
    287         {
    288             if (m_lastTips.Value == this)
    289                 m_lastTips = new KeyValuePair<string, FrmTips>();
    290             m_lstTips.Remove(this);
    291             ReshowTips();
    292 
    293             for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
    294             {
    295                 if (Application.OpenForms[i].IsDisposed || !Application.OpenForms[i].Visible || Application.OpenForms[i] is FrmTips)
    296                 {
    297                     continue;
    298                 }
    299                 else
    300                 {
    301                     Timer t = new Timer();
    302                     t.Interval = 100;
    303                     var frm = Application.OpenForms[i];
    304                     t.Tick += (a, b) =>
    305                     {
    306                         t.Enabled = false;
    307                         if (!frm.IsDisposed)
    308                             ControlHelper.SetForegroundWindow(frm.Handle);
    309                     };
    310                     t.Enabled = true;
    311                     break;
    312                 }
    313             }
    314         }
    315 
    316         private void FrmTips_Load(object sender, EventArgs e)
    317         {
    318             if (m_CloseTime > 0)
    319             {
    320                 this.timer1.Interval = m_CloseTime;
    321                 this.timer1.Enabled = true;
    322             }
    323         }
    324 
    325         private void timer1_Tick(object sender, EventArgs e)
    326         {
    327             this.timer1.Enabled = false;
    328             this.Close();
    329         }
    330 
    331         private void btnClose_MouseDown(object sender, MouseEventArgs e)
    332         {
    333             this.timer1.Enabled = false;
    334             this.Close();
    335         }
    336 
    337         public static FrmTips ShowTipsSuccess(Form frm, string strMsg)
    338         {
    339             return FrmTips.ShowTips(frm, strMsg, 3000, false, ContentAlignment.BottomCenter, null, TipsSizeMode.Large, null, TipsState.Success);
    340         }
    341 
    342         public static FrmTips ShowTipsError(Form frm, string strMsg)
    343         {
    344             return FrmTips.ShowTips(frm, strMsg, 3000, false, ContentAlignment.BottomCenter, null, TipsSizeMode.Large, null, TipsState.Error);
    345         }
    346 
    347         public static FrmTips ShowTipsInfo(Form frm, string strMsg)
    348         {
    349             return FrmTips.ShowTips(frm, strMsg, 3000, false, ContentAlignment.BottomCenter, null, TipsSizeMode.Large, null, TipsState.Info);
    350         }
    351         public static FrmTips ShowTipsWarning(Form frm, string strMsg)
    352         {
    353             return FrmTips.ShowTips(frm, strMsg, 3000, false, ContentAlignment.BottomCenter, null, TipsSizeMode.Large, null, TipsState.Warning);
    354         }
    355 
    356         private void FrmTips_FormClosed(object sender, FormClosedEventArgs e)
    357         {
    358             this.Dispose();
    359             GC.Collect();
    360         }
    361 
    362     }
    363 
    364     public enum TipsSizeMode
    365     {
    366         Small,
    367         Medium,
    368         Large,
    369         None
    370     }
    371     public enum TipsState
    372     {
    373         Default = -1,
    374         Success = -6566849,
    375         Info = -12477983,
    376         Warning = -357816,
    377         Error = -1097849
    378     }
    379 }
    View Code
      1 namespace HZH_Controls.Forms
      2 {
      3     partial class FrmTips
      4     {
      5         /// <summary>
      6         /// Required designer variable.
      7         /// </summary>
      8         private System.ComponentModel.IContainer components = null;
      9 
     10         /// <summary>
     11         /// Clean up any resources being used.
     12         /// </summary>
     13         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
     14         protected override void Dispose(bool disposing)
     15         {
     16             if (disposing && (components != null))
     17             {
     18                 components.Dispose();
     19             }
     20             base.Dispose(disposing);
     21         }
     22 
     23         #region Windows Form Designer generated code
     24 
     25         /// <summary>
     26         /// Required method for Designer support - do not modify
     27         /// the contents of this method with the code editor.
     28         /// </summary>
     29         private void InitializeComponent()
     30         {
     31             this.components = new System.ComponentModel.Container();
     32             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmTips));
     33             this.lblMsg = new System.Windows.Forms.Label();
     34             this.btnClose = new System.Windows.Forms.PictureBox();
     35             this.pctStat = new System.Windows.Forms.PictureBox();
     36             this.timer1 = new System.Windows.Forms.Timer(this.components);
     37             ((System.ComponentModel.ISupportInitialize)(this.btnClose)).BeginInit();
     38             ((System.ComponentModel.ISupportInitialize)(this.pctStat)).BeginInit();
     39             this.SuspendLayout();
     40             // 
     41             // lblMsg
     42             // 
     43             this.lblMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
     44             | System.Windows.Forms.AnchorStyles.Left) 
     45             | System.Windows.Forms.AnchorStyles.Right)));
     46             this.lblMsg.BackColor = System.Drawing.Color.Transparent;
     47             this.lblMsg.Font = new System.Drawing.Font("微软雅黑", 12F);
     48             this.lblMsg.Location = new System.Drawing.Point(32, 0);
     49             this.lblMsg.Name = "lblMsg";
     50             this.lblMsg.Size = new System.Drawing.Size(279, 46);
     51             this.lblMsg.TabIndex = 1;
     52             this.lblMsg.Text = "提示信息";
     53             this.lblMsg.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
     54             // 
     55             // btnClose
     56             // 
     57             this.btnClose.Anchor = System.Windows.Forms.AnchorStyles.Right;
     58             this.btnClose.BackColor = System.Drawing.Color.Transparent;
     59             this.btnClose.Image = global::HZH_Controls.Properties.Resources.qty_delete;
     60             this.btnClose.Location = new System.Drawing.Point(313, 11);
     61             this.btnClose.Name = "btnClose";
     62             this.btnClose.Size = new System.Drawing.Size(25, 25);
     63             this.btnClose.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
     64             this.btnClose.TabIndex = 2;
     65             this.btnClose.TabStop = false;
     66             this.btnClose.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnClose_MouseDown);
     67             // 
     68             // pctStat
     69             // 
     70             this.pctStat.Anchor = System.Windows.Forms.AnchorStyles.Left;
     71             this.pctStat.BackColor = System.Drawing.Color.Transparent;
     72             this.pctStat.Image = global::HZH_Controls.Properties.Resources.alarm;
     73             this.pctStat.Location = new System.Drawing.Point(7, 13);
     74             this.pctStat.Name = "pctStat";
     75             this.pctStat.Size = new System.Drawing.Size(20, 20);
     76             this.pctStat.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
     77             this.pctStat.TabIndex = 0;
     78             this.pctStat.TabStop = false;
     79             // 
     80             // timer1
     81             // 
     82             this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
     83             // 
     84             // FrmTips
     85             // 
     86             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
     87             this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(247)))), ((int)(((byte)(247)))), ((int)(((byte)(247)))));
     88             this.ClientSize = new System.Drawing.Size(340, 47);
     89             this.Controls.Add(this.btnClose);
     90             this.Controls.Add(this.lblMsg);
     91             this.Controls.Add(this.pctStat);
     92             this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
     93             this.IsFullSize = false;
     94             this.IsShowRegion = true;
     95             this.Name = "FrmTips";
     96             this.ShowIcon = false;
     97             this.ShowInTaskbar = false;
     98             this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
     99             this.Text = "FrmTips";
    100             this.TopMost = true;
    101             this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmTips_FormClosing);
    102             this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FrmTips_FormClosed);
    103             this.Load += new System.EventHandler(this.FrmTips_Load);
    104             ((System.ComponentModel.ISupportInitialize)(this.btnClose)).EndInit();
    105             ((System.ComponentModel.ISupportInitialize)(this.pctStat)).EndInit();
    106             this.ResumeLayout(false);
    107 
    108         }
    109 
    110         #endregion
    111 
    112         private System.Windows.Forms.PictureBox pctStat;
    113         private System.Windows.Forms.Label lblMsg;
    114         private System.Windows.Forms.PictureBox btnClose;
    115         private System.Windows.Forms.Timer timer1;
    116     }
    117 }
    View Code

    用处及效果

    用处:向用户提示一些信息,但是这些信息又不是非常重要,不需要用户确定的时候可以用到这个东西

    效果:

    调用示例

    1             FrmTips.ShowTipsError(this, "Error提示信息");
    2             FrmTips.ShowTipsInfo(this, "Info提示信息");
    3             FrmTips.ShowTipsSuccess(this, "Success提示信息");
    4             FrmTips.ShowTipsWarning(this, "Warning提示信息");

    最后的话

    如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星 星吧

  • 相关阅读:
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
    学期总结
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
  • 原文地址:https://www.cnblogs.com/bfyx/p/11363989.html
Copyright © 2020-2023  润新知