前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(二十一)c#Winform自定义控件-气泡提示

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

作者头像
冰封一夏
发布2019-09-11 16:00:05
7480
发布2019-09-11 16:00:05
举报

前提

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

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

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

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

目录

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

准备工作

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

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

开始

定义一些枚举

代码语言:javascript
复制
 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

属性

代码语言:javascript
复制
 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         }

提供一些公共函数

代码语言:javascript
复制
 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         }

提供的静态函数

代码语言:javascript
复制
  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         }

一些事件处理

代码语言:javascript
复制
 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         }

最后看一下完整代码

代码语言:javascript
复制
  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 }
代码语言:javascript
复制
  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 }

用处及效果

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

效果:

调用示例

代码语言:javascript
复制
1             FrmTips.ShowTipsError(this, "Error提示信息");
2             FrmTips.ShowTipsInfo(this, "Info提示信息");
3             FrmTips.ShowTipsSuccess(this, "Success提示信息");
4             FrmTips.ShowTipsWarning(this, "Warning提示信息");

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提
  • 目录
  • 准备工作
  • 开始
  • 用处及效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档