zoukankan      html  css  js  c++  java
  • 字体

    FontFamily类

    用FontFamily类的实例表示字体系列--一组基本设计类似、但在样式上有某些变化的字样。标准字体样式中的变化一般有黑体、斜体和黑斜体,如Arial字体系列包含4个字样:Arial Regular 、Arial Bold、Arial Italic、Arial Bold Italic。

    创建FontFamily对象:

    方法一:FontFamily ff = new FontFamily(“Arial”)

    方法二:使用GenericFontFamily枚举的值(该枚举是System。Drawing。Text命名空间的一部分)FontFamily ff = new FontFamily(GenericFontFamily。Serif)

    可以使用InstalledFontCollection对象来验证字体是否已安装。

    创建好FontFamily对象后,就可以使用它定义某个Font对象,FontFamily ff = new FontFamily("Arial"); Font f = new Font(ff,12);另外,还可以直接定义字体Font f = new Font("Arial",12);

    使用默认的Font对象时不需要创建该对象也不需要释放它,如:

    Graphics g = e.Graphics;

    g.DrawString("Hello world",this.Font,Brushes.Black,0,0);

    格式化文本的最简单方式,也是最常用的方式是在创建Font对象时设置字体样式。字体样式有5个基本选项:Bold、Italic、Regular、Strikeout和Underline,可以使用布尔运算符OR或|把这些值组合在一起,获得样式的综合效果。

    行、对齐和方向

    GDI+可以使用单词自动换行功能来绘制对行文本,实现时只需调用DrawString方法,传送一个矩形,其宽度小于文本字符串的宽度,其高度则足以容纳多行文本:

    Graphics g = e.Graphics;             g.FillRectangle(Brushes.White, this.ClientRectangle);             String s = "This string is long enough to wrap.";             s += "With a 200px - width rectangle,and a 12pt font.";             s += "it requires six lines to display the string in its entirety.";             Font f = new Font("Arial", 12);             Rectangle r = new Rectangle(20, 20, 200, f.Height * 6);             g.DrawRectangle(Pens.Black, r);             g.DrawString(s, f, Brushes.Black, r);             f.Dispose();

      在运行时控制行数可以使用MeasureString方法计算Size对象,该对象的长度反映了字符串的长度和宽度限制,然后使用该Size对象设置矩形的宽度和高度。,下面的例子在矩形中绘制一些文本,该矩形的宽度不大于150像素,但可根据需要容纳任意多行文本。

    Graphics g = e.Graphics;             g.FillRectangle(Brushes.White, this.ClientRectangle);             String s = "This string is long enough to wrap.";             s += "With a 200px - width rectangle,and a 12pt font.";             s += "it requires six lines to display the string in its entirety.";             Font f = new Font("Arial", 12);             SizeF sf = g.MeasureString(s, f, 150);             RectangleF rf = new RectangleF(20, 20, sf.Width, sf.Height);             g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height);             g.DrawString(s, f, Brushes.Black, rf);

     

    禁止文本自动换行

    创建一个StringFormat对象,把FormatFlags属性设置为StringFormatFlags.NoWrap,并把StringFormat对象传送给DrawString方法,禁止文本自动换行。

    Graphics g = e.Graphics;             g.FillRectangle(Brushes.White, this.ClientRectangle);             String s = "This string is long enough to wrap.";             Font f = new Font("Arial", 12);             Rectangle r = new Rectangle(20, 20, 150, f.Height * 4);             StringFormat sf = new StringFormat();             sf.FormatFlags = StringFormatFlags.NoWrap;             g.DrawRectangle(Pens.Black, r);             g.DrawString(s, f, Brushes.Black, r, sf);             f.Dispose();

     

    默认情况下文本时左对齐,可以设置文本的水平和垂直居中,为此可以再次使用StringFormat对象的功能,这次把它的Alignment和LineAlignment属性设置为相应的值,并把该对象传送给DrawString方法。

    StringFormat sf = new StringFormat();

    sf.Alignment = StringAlignment.Center;

    sf.LineAlignment = StringAlignment.Center;

    绘制竖向文本有两个方法,一是定义一些横向文本,然后把坐标系空间旋转90°,二是创建一个StringFormat对象来绘制竖向文本(使用stringformat类构造函数的一个重载版本,给它传送一个directionvertical值)

    Graphics g = e.Graphics;             g.FillRectangle(Brushes.White, this.ClientRectangle);             String s = "This string is long enough to wrap.";             StringFormat sf = new StringFormat(StringFormatFlags.DirectionVertical);             Font f = new Font("Times New Roman", 14);             SizeF sizef = g.MeasureString(s, f, Int32.MaxValue, sf);             RectangleF rf = new RectangleF(20, 20, sizef.Width, sizef.Height);             g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height);             g.DrawString(s, f, Brushes.Black, rf, sf);             f.Dispose();

  • 相关阅读:
    C#.NET常见问题(FAQ)-如何给Listbox添加右键菜单
    C#.NET常见问题(FAQ)-如何捕捉窗体关闭的事件,弹窗确认是否退出
    C#.NET常见问题(FAQ)-控制台程序如何输出Messagebox
    C#.NET常见问题(FAQ)-TabControl如何隐藏和显示页面
    C#.NET常见问题(FAQ)-SplitPanel如何设置上下和左右
    Oracle 存储过程
    Oracle的存储过程
    Oracle通用分页存储过程的创建与使用
    winform窗体间传值
    多线程下访问控件的方式
  • 原文地址:https://www.cnblogs.com/ttssrs/p/2396498.html
Copyright © 2011-2022 走看看