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

9 篇文章 1 订阅
3 篇文章 0 订阅

昨天做一个软件,是从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


  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值