您的位置:首页 > 编程语言 > VB

【VB.NET2010】在PictureBox上绘制文字的相关问题

2013-07-31 13:36 579 查看
昨天做一个软件,是从VB6转到VB.NET里面。涉及到在PictureBox中绘图的问题。

VB6中,代码是这样的,很简单的:

Sub ShowStatue(ByVal s As String)
With Picture1
.AutoRedraw = True
.Cls
.FontSize = 15
.CurrentX = (.ScaleWidth - .TextWidth("文字内容")) / 2
.CurrentY = (.ScaleHeight - .TextHeight("文字内容")) / 2
Picture1.Print s
.Refresh
.AutoRedraw = False
End With
End Sub


然而,我转到.NET中的时候就懵了。

找不到AutoRedraw有木有啊!

找不到Cls有木有啊!

找不到FontSize有木有啊!

找不到CurrentX有木有啊!

找不到CurrentY有木有啊!

找不到TextWidth有木有啊!

找不到TextHeight有木有啊!

怎么办?不能就这样罢了!我记得以前看到过vb和vb.net对比的文章,我试试百度下。

于是我找到了说明,说:

TextWidth 属性System.Drawing.Graphics.MeasureString 方法
于是我就立刻实验,力图找到替代TextWidth和TextHeight的方法,得到了如下代码:

Dim font As New Font("宋体", 12)
Dim bmp As New Bitmap(PictureBox1.Width, PictureBox1.Height)
Dim g = Graphics.FromImage(bmp)
Dim sizef As SizeF = g.MeasureString("文字内容", font)
'sizef.Height表示TextHeight的值,sizef.Width表示TextWidth的值,替代完成!


完成了获取文字输出的实际的代码之后,就需要解决文字绘制的问题了。

查阅百度上的相关资料,得出了下面的简单代码:

Dim nBrush As New SolidBrush(Color.Black)
Dim font As New Font("宋体", 12)
Dim g = PictureBox1.CreateGraphics
g.Clear(PictureBox1.BackColor)
g.DrawString("文字内容", font, nBrush,5,5)
g = Nothing
这个代码可以在PictureBox上面绘制出文字,而且反复绘制不会出现重叠,因为我这里的g.Clear(PictureBox1.BackColor)就是清空显示,并且恢复原来的颜色背景的。

但是,问题是,我如果绘制的间隔很短,很频繁的时候,这个PictureBox中的文字会不停的闪烁

于是我又查阅了很多资料,终于完成了最后的一个版本,下面贴上完整的代码:

Sub ShowStatue(ByVal info As String)
Dim nBrush As New SolidBrush(Color.Black)
Dim font As New Font("宋体", 12)
Dim bmp As New Bitmap(PictureBox1.Width, PictureBox1.Height)
Dim g = Graphics.FromImage(bmp)
Dim left As Single
Dim top As Single
Dim sizef As SizeF = g.MeasureString(info, font)
g.Clear(PictureBox1.BackColor)
top = (PictureBox1.Height - sizef.Height) / 2
left = (PictureBox1.Width - sizef.Width) / 2
g.DrawString(info, font, nBrush, left, top)
g = PictureBox1.CreateGraphics
g.DrawImage(bmp, 0, 0)
g = Nothing
bmp = Nothing
End Sub


We Are The World,We Are The Children!

谢谢大家浏览,您的留言将是宝贵的鼓励!

Michael Jackson:It's All For Love
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: