问题描述
比如我有一个字符串“007”,我还有一个长100,高50的Rectangle,问题是我如何才能获得一个合适的字体大小使“007”这三个字符充满这个Rectangle最化大显示呢?即不会超出范围也不会自动换行,求高手,先谢过了!我写了一个类,但是还是不能实现我想要的功能:我期望是这样的:现实很骨感,是这样的:代码如下,请高手帮我改一下吧PublicClassForm1PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimmyGraphicsAsGraphicsDimmyRectangleAsRectangleDimmyPenAsNewPen(Color.Blue)myGraphics=Me.CreateGraphics()myRectangle=NewRectangle(x:=10,y:=10,width:=200,height:=100)'drawrectanglefrompenandrectangleobjectsmyGraphics.DrawRectangle(pen:=myPen,rect:=myRectangle)DimtitleBox=NewRenderInBox(myRectangle,Me,TextBox1.Text,"Tahoma",200)titleBox.Render(myGraphics,Brushes.Red)EndSubEndClassPublicClassRenderInBoxPrivateboxAsRectanglePrivaterootAsFormPrivatefontAsFontPrivatetextAsStringPrivateformatAsStringFormatPublicSubNew(boxAsRectangle,rootAsForm,textAsString,fontFamilyAsString,OptionalstartFontSizeAsInteger=150)Me.root=rootMe.box=boxMe.text=textDimgraphicsAsGraphics=root.CreateGraphics()DimfitsAsBoolean=FalseDimsizeAsInteger=startFontSizeDoIffontIsNotNothingThenfont.Dispose()EndIffont=NewFont(fontFamily,size,FontStyle.Regular,GraphicsUnit.Pixel)DimstringSizeAsSizeF=graphics.MeasureString(text,font,box.Width,format)fits=(stringSize.Height<box.Height)size-=1LoopWhileNotfitsgraphics.Dispose()format=NewStringFormat()With{.Alignment=StringAlignment.Center,.LineAlignment=StringAlignment.Center}EndSubPublicSubRender(graphicsAsGraphics,brushAsBrush)graphics.DrawString(text,font,brush,box,format)EndSubEndClass
解决方案
解决方案二:
可以看看http://www.myexception.cn/c-sharp/62044.html
解决方案三:
字体本身就有留白的
解决方案四:
引用楼主tulip811226的回复:
获得一个合适的字体大小使“007”这三个字符充满这个Rectangle最化大显示呢
首先,你可以自己定义一个“数字字体”文件。如果做不到,而且你也不知道将来要在运行时真正使用什么字体,甚至你也不知道要打印的除了数字以外还有没有其它符号,那么你只能用程序自动进行判断:先打印,然后按像素来获取打印效果,自己判断上下间距,然后清空画布重新打印,反复重试。
解决方案五:
首先到网上搜一些专为数字而设计的字体文件,而不用自己瞎忙活。