.net的字体属性的改变

       前几天看见XX写代码时,对于字体属性的设置发费了一番功夫却结果不对。他要完成一个类似编辑器的功能,可以设置字体的如加粗,斜体,下划线的通用属性。
      他的代码差不多如下:
  
1 if  (font.Bold ! =   true )
2     font  =   new  Font(font, FontStyle.Bold);
3    //........很长,但却很难处理
    
     源程序中还有很多对象处理字体对象。我们先不考虑那些代码,但上面的代码就存在很多问题:如果原来font既是加粗的,又是有下划线的,则font.Bold!=true却是成立的。而且这种操作模式对一些功能很难进行,如:如何进行样式的叠加(加粗还要加下划线),如何把已经加粗的字体去掉加粗等等。
     看到这些代码时,我忽然想现在新的编程人员,特别是使用.net,java开发企业应用程序的编程人员,很少有人能对位运算的应用很熟悉了,甚至能在实际中想到它的使用。其实字体样式在框架是定义成位枚举的[flag],意味着它可以使用位运算符来进行操作。
      下面是加粗的实现,它自动改变字体的加粗情况,还保留字体的原来其它样式:
     
1 FontStyle fs  =  font.Style;
2 fs  ^=  FontStyle.Bold;
3 font  =   new  Font(fs);
      如果只是判断当前字体是否是加粗,而不考虑是否有了其它样式设置,可以使用&运算,然后再与FontStyle.Bold相等比较。如下:
1 if (font.Style & FontStyle.Bold == FontStyle.Bold)
2     // 字体是加粗的
3 else
4     // 字体不是加粗的

这些都是位操作的基本技巧,但却被很多人遗忘了!

转载于:https://www.cnblogs.com/Adon/archive/2007/10/18/928920.html

你可能感兴趣的:(java)