提示 延时自动关闭
2016-04-30 16:49
519 查看
分享自己做的一个简单的提示方法,主要用于用户操作反馈,当然啦 !没有messagebox和msgbox那么多功能
效果:
操作出错提示
操作成功提示
''' <summary> ''' <para>绘制居中显示的提示</para> ''' </summary> ''' <param name="parentCtl">父容器</param> ''' <param name="drawString">提示文字</param> ''' <param name="closeMillisecond">延时关闭时间,单位毫秒</param> ''' <param name="operateSucceed">操作是否成功(默认成功) ''' <para>操作成功——绿底白字(淡绿色)</para> ''' <para>操作失败——红底白字(淡珊瑚色)</para> </param> Public Sub DrawTips(ByVal parentCtl As Control, ByVal drawString As String, ByVal closeMillisecond As Integer, Optional ByVal operateSucceed As Boolean = True) '线程安全操作 创建lbl必须要在invoke里面 否则parentCtl就操作不了 其他线程创建的控件 parentCtl.Invoke(New Action( Sub() Dim lbl As Label = New Label Dim g As Graphics = lbl.CreateGraphics Dim font As New Font("微软雅黑", 20) '测量字体宽度 Dim sizeOfString As SizeF = g.MeasureString(drawString, font) g.Dispose() parentCtl.SuspendLayout() lbl.AutoSize = True '根据传入的 操作结果 选择 提示底色 If operateSucceed = True Then lbl.BackColor = Color.LightGreen Else lbl.BackColor = Color.LightCoral End If '动态添加 并设置标签属性 lbl.Font = font lbl.ForeColor = Color.White '居父容器中显示 lbl.Location = New Point(Convert.ToInt32(parentCtl.Size.Width / 2 - sizeOfString.Width / 2), Convert.ToInt32(parentCtl.Size.Height / 2 - sizeOfString.Height / 2)) lbl.Name = "drawTips" lbl.Text = drawString '添加到窗体 parentCtl.Controls.Add(lbl) '置顶功能必须是添加控件到窗体之后 才能设置 lbl.BringToFront() parentCtl.ResumeLayout() parentCtl.Refresh() '几秒后卸载标签 Dim thread3 As New Threading.Thread( Sub() '如果父容器已经关闭,再执行下面的操作会引发异常 Try Threading.Thread.Sleep(closeMillisecond) '线程安全操作 parentCtl.Invoke( Sub() parentCtl.Controls.Remove(lbl) lbl.Dispose() End Sub) Catch ex As Exception ' End Try End Sub) thread3.Start() End Sub)) #Region "旧(不可置顶 弃用2016 04 30)" 'Dim g As Graphics = parentCtl.CreateGraphics 'Dim brush As New SolidBrush(Color.White) ''根据传入的 操作结果 选择 提示底色 'Dim pen As Pen 'If operateSucceed = True Then ' pen = New Pen(Color.LightGreen, sizeOfString.Height) 'Else ' pen = New Pen(Color.LightCoral, sizeOfString.Height) 'End If 'g.Clear(parentCtl.BackColor) ''画线当做底色 'g.DrawLine(pen, New Point(Convert.ToInt32(parentCtl.Size.Width / 2 - sizeOfString.Width / 2), Convert.ToInt32(parentCtl.Size.Height / 2)), New Point(Convert.ToInt32(parentCtl.Size.Width / 2 + sizeOfString.Width / 2), Convert.ToInt32(parentCtl.Size.Height / 2))) ''画字 'g.DrawString(drawString, New Font("微软雅黑", 20), brush, New PointF(Convert.ToSingle(parentCtl.Size.Width / 2 - sizeOfString.Width / 2), Convert.ToSingle(parentCtl.Size.Height / 2 - sizeOfString.Height / 2))) ''Thread.Sleep(3000) ''g.Clear(parentCtl.BackColor) 'g.Dispose() #End Region End Sub
效果:
操作出错提示
操作成功提示
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- GUI - Web前端开发框架
- 评价ui设计作品好坏的八个标准(界面/交互设计研究)
- C#实现多线程的同步方法实例分析
- VB.NET校验字符串函数
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- VB.NET实现验证信用卡卡号
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- 解析C#多线程编程中异步多线程的实现及线程池的使用
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析
- 分享我在工作中遇到的多线程下导致RCW无法释放的问题
- C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步的方法
- C#控制台下测试多线程的方法
- 为Yahoo! UI Extensions Grid增加内置的可编辑器