【VB.NET2010】在PictureBox上绘制文字的相关问题
2013-07-31 13:36
579 查看
昨天做一个软件,是从VB6转到VB.NET里面。涉及到在PictureBox中绘图的问题。
在VB6中,代码是这样的,很简单的:
然而,我转到.NET中的时候就懵了。
找不到AutoRedraw有木有啊!
找不到Cls有木有啊!
找不到FontSize有木有啊!
找不到CurrentX有木有啊!
找不到CurrentY有木有啊!
找不到TextWidth有木有啊!
找不到TextHeight有木有啊!
怎么办?不能就这样罢了!我记得以前看到过vb和vb.net对比的文章,我试试百度下。
于是我找到了说明,说:
于是我就立刻实验,力图找到替代TextWidth和TextHeight的方法,得到了如下代码:
完成了获取文字输出的实际宽和高的代码之后,就需要解决文字绘制的问题了。
查阅百度上的相关资料,得出了下面的简单代码:
但是,问题是,我如果绘制的间隔很短,很频繁的时候,这个PictureBox中的文字会不停的闪烁。
于是我又查阅了很多资料,终于完成了最后的一个版本,下面贴上完整的代码:
We Are The World,We Are The Children!
谢谢大家浏览,您的留言将是宝贵的鼓励!
Michael Jackson:It's All For Love
在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 方法 |
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
相关文章推荐
- [VB.NET]图象处理问题,如何添加文字?
- VB升级到VB.NET平台LSet函数相关问题
- 如何从VB6迁移到VB.NET相关问题解决方案
- [VB.NET]请问往picturebox中写入文字,用什么方法?
- 从VB6迁移到VB.NET及相关问题
- VB.Net使用CInt转型非整数值时需要注意的问题
- [VB.NET]大容量文件编码转换问题,高手请进,在线等
- [VB.NET]getfilenames的问题求助!
- [VB.NET]listview问题
- [VB.NET]font属性重要问题 在线等!
- VB.NET打包问题小结
- [VB.NET]数据插入问题
- [VB.NET]datatable.AcceptChanges问题
- vb.net 2010/2008 导出到excel,无需引用
- [VB.NET]对SQL语句中的WHERE子句中遇到NULL值的参数绑定问题
- [VB.NET]VB.NET做基于WEB的管理系统DATAGRID中数据修改的问题
- [VB.NET]小问题, textbox1
- [VB.NET]VB2005 中MDI窗体的剪贴板问题
- [VB.NET]菜问题:VB.NET 中如何加Inet控件
- 用VB.NET绘制GDI图形