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