(二十一)c#Winform自定义控件-气泡提示-HZHControls
官网
前提
入行已经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中模式(成功,错误,警告,正常)
开始
定义一些枚举
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 }
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 }
用处及效果
用处:向用户提示一些信息,但是这些信息又不是非常重要,不需要用户确定的时候可以用到这个东西
效果:
调用示例
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 点个星 星吧
作者:冰封一夏
出处:http://www.cnblogs.com/bfyx/
HZHControls官网:http://www.hzhcontrols.cn
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,
且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
GitHub:https://github.com/kwwwvagaa/NetWinformControl
码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git