请问如何正确测量一个字符串的显示宽度?

canyqf 2003-08-06 12:12:15
Graphics的MeasureString方法在右边有空白字符的情况下好像不能正确取得,
如下代码,选中字符中只有空格时,不论选中多少个空格,结果都是4,
包含非空白字符时,
g.MeasureString(MaskTextBox1.SelectedText, MaskTextBox1.Font).Width

g.MeasureString(MaskTextBox1.SelectedText.TrimEnd(" "), MaskTextBox1.Font).Width
的结果一样。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Drawing.Graphics = MaskTextBox1.CreateGraphics
TextBox1.Text = g.MeasureString(MaskTextBox1.SelectedText, MaskTextBox1.Font).Width
g.Dispose()
End Sub

MaskTextBox1的Font为:宋体, 9pt

左边的空格不会导致这个问题。
...全文
178 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
canyqf 2003-08-07
  • 打赏
  • 举报
回复
谢谢两位!!
sindyzhou 2003-08-06
  • 打赏
  • 举报
回复
这个宽度是现实的宽度,右边有空格显示出来你也看不到呀

字体不一样当然会导致结果不一样的,如果是每个字符的宽度都相同的字体,字符串的显示宽度就跟字符串的长度成正比,譬如说:Courier new等

如果一定要你所说的结果的话,可以想其他办法得到,如:

1,得到原字符串的长度
2,得到去掉两端空格的长度
3,把右边的空格移到左边,得到其长度

用这三个值就可以计算得到你想要的长度了
canyqf 2003-08-06
  • 打赏
  • 举报
回复
不行的,
左边不一定有空格,即便一定有,只有一个字符的字符串的长度并不是由N个相同字符组成字符串长度的1/N。
比如:Font为:宋体, 9pt
一个"A"的测量结果是:10.1875
两个"A"的测量结果却是:16.375
szch 2003-08-06
  • 打赏
  • 举报
回复
对于空格,或者测试左边一个空格的宽度.
右边空格的宽度=一个左边空格的宽度*右边空格数

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧