绘制多行文本需要计算行高,然后绘出字符串:
1 private void Form1_Paint( object sender, PaintEventArgs e) 2 { 3 Graphics g = e.Graphics; 4 g.FillRectangle(Brushes.White, this .ClientRectangle); 5 string s = " This string is long enough to wrap. " ; 6 s += " With a 200px-width rectangle,and a 12pt font. " ; 7 s += " it requires six lines to display the stirng in its entirety. " ; 8 9 Font f = new Font( " Arial " , 12 ); 10 Rectangle r = new Rectangle( 20 , 20 , 200 , f.Height * 6 ); 11 g.DrawRectangle(Pens.Black,r); 12 g.DrawString(s, f, Brushes.Black, r); 13 14 f.Dispose(); 15 }
绘制竖向文本,需要指定StringFormat类为DirectionVertical,即:StringFormat sf = new StringFormat(StringFormatFlags.DirectionVertical);
然后应用于文字
SizeF sizef = g.MeasureString(s, f, Int32.MaxValue, sf);
// Create and draw the rectangle
// Also draw the text string (using the StringFormat object)
RectangleF rf = new RectangleF(20, 20, sizef.Width, sizef.Height);
代码如下:
1 private void Form1_Paint( object sender, 2 System.Windows.Forms.PaintEventArgs e) 3 { 4 Graphics g = e.Graphics; 5 g.FillRectangle(Brushes.White, this .ClientRectangle); 6 7 // Create a text string, a Font object, and a StringFormat object 8 String s = " Accrington Stanley " ; 9 StringFormat sf = new StringFormat(StringFormatFlags.DirectionVertical); 10 Font f = new Font( " Times New Roman " , 14 ); 11 12 // Calculate the size of the text string's containing rectangle 13 SizeF sizef = g.MeasureString(s, f, Int32.MaxValue, sf); 14 15 // Create and draw the rectangle 16 // Also draw the text string (using the StringFormat object) 17 RectangleF rf = new RectangleF( 20 , 20 , sizef.Width, sizef.Height); 18 g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height); 19 g.DrawString(s, f, Brushes.Black, rf, sf); 20 21 f.Dispose(); 22 }