分享自己做的一个简单的提示方法,主要用于用户操作反馈,当然啦 !没有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
效果:
操作出错提示
操作成功提示