我使用此方法在form1上绘制文本:
private bool DrawText(bool draw, string texttodraw)
{
Graphics g = this.CreateGraphics();
SizeF size = g.MeasureString(texttodraw, SystemFonts.DefaultFont,14);
g.DrawString(texttodraw, Font, Brushes.Red, pictureBox1.Location.X + (pictureBox1.Width / 2) - (size.Width / 2),
pictureBox1.Location.Y - 30);
return draw;
}
我试图在SizeF大小的lline上将Width设置为14,但它没有改变dize,它唯一做的就是从它的位置移动一点文字。
如何更改文本的字体大小,以及保持文本位置的透视图(如果这是正确的单词)?
这就是在不使用宽度14的情况下,所有文本位于pictureBox1上方的中心。我希望当我改变文字大小时,它会像现在一样保持在中心位置。
文字是红色的,在这种情况下是希伯来文。
答案 0 :(得分:3)
尝试使用更大的字体:
using (Font bigFont = new Font(SystemFonts.DefaultFont.FontFamily, 14, FontStyle.Regular)) {
SizeF size = g.MeasureString(texttodraw, bigFont, 14);
g.DrawString(texttodraw, bigFont, Brushes.Red, pictureBox1.Location.X + (pictureBox1.Width / 2) - (size.Width / 2),
pictureBox1.Location.Y - 30);
}
请避免使用CreateGraphics,它只是一个临时绘图,会被重叠窗口或最小化窗体删除。它也会引起闪烁。使用paint事件中的图形对象并使控件无效以更新绘画。
另外,请使用TextRenderer.DrawText和TextRenderer.MeasureText进行文本渲染。 DrawString主要用于打印到纸张。
答案 1 :(得分:1)
我认为最好的方法是使用StringFormat
对象水平或垂直对齐文本或使用Graphics.DrawString()
函数的第5次重载对齐文本:
您需要提供Rectangle
对象,并且已针对此对象进行对齐。
StringFormat sf=new StringFormat();
sf.LineAlignment = StringAlignment.Center;//center-align vertically
sf.Alignment = StringAlignment.Center; //center-align horizontally
答案 2 :(得分:0)
private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Font drawFont = new Font("Arial Black", 9);
e.Graphics.DrawString(nic.Text, drawFont, Brushes.Maroon, 174, 12);