今天看《Pro Net 2.0 Windows Forms And Custom Cortrols In C#》时看到枚举一节,发现了在一个枚举里面需要合并多个值,看到了用到了”|”运算符,原来没怎么注意,今天想了一下为什么用”|”呢?
  MSDN里面看到了这样一句话:“用2的幂(即 1248 等)定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。”
  于是写了一个例子:

        [FlagsAttribute]
        
enum Colors_1
        
{
            Red 
= 1, Green = 2, Blue = 4, Yellow = 8
        }
;
        
//测试
        private void button1_Click(object sender, EventArgs e)
        
{
            Colors_1 color_1 
= Colors_1.Red | Colors_1.Green | Colors_1.Blue 
| Colors_1.Yellow;

            
string strResult = color_1.ToString() + " " + ((int)color_1)
.ToString();
            MessageBox.Show(strResult);
        }

输出结果:


咦!  1 + 2 + 4 + 8 = 15 刚刚等于15,难道这是巧合?
全部显示出来了,安逸!

再写个例子试试:

        [FlagsAttribute]
        
enum Colors_2
        
{
            Red 
= 1, Green = 2, Blue = 3, Yellow = 4
        }
;
        
//测试
        private void button1_Click(object sender, EventArgs e)
        
{
            Colors_2 color_2 
= Colors_2.Red | Colors_2.Green | Colors_2.Blue
 
| Colors_2.Yellow;

            
string strResult = color_2.ToString() + " " + ((int)color_2).ToString();
            MessageBox.Show(strResult);
        }

输出结果:

晕,怎么没把颜色全部显示出来呀?
咦!3 + 4 = 7 刚好显示枚举值为3,4的两种颜色

再写一个例子呢?

        //测试
        private void button1_Click(object sender, EventArgs e)
        
{
            Colors_1 c 
= (Colors_1)Enum.Parse(typeof(Colors_1), "7");
            MessageBox.Show(c.ToString() 
+ " " + ((int)c).ToString());
        }

输出结果:

居然会自动转换成相应的枚举值,厉害!

 再来我加个枚举为7的值:

        [FlagsAttribute]
        
enum Colors_1
        
{
            Red 
= 1, Green = 2, Blue = 4, Yellow = 8, Seven = 7
        }
;
        
//测试
        private void button1_Click(object sender, EventArgs e)
        
{
            Colors_1 c 
= (Colors_1)Enum.Parse(typeof(Colors_1), "7");
            MessageBox.Show(c.ToString() 
+ " " + ((int)c).ToString());
        }

输出结果:

印证了MSDN那句话,只有将枚举值设置为0,2,4,8…..这样的只才会叠加,枚举会自动判断当前值,如果枚举里面有这个值当然就显示这个值了;如果没有就做匹配用加法看看那几个数加起来刚好是这个枚举值,但如果有几个数字加起来都等于这个值怎么办呢?还没遇到呢,目前这是我的理解,希望大牛些指教!
posted @ 2008-07-12 15:55 Simens 阅读(1259) | 评论 (12)编辑
     摘要: 在网上找了关于ini文件读写方法,还是没有找到ini文件中有一个Section多个Key的读写情况,在一篇C++文章中得到点提示操作如下:1.创建ini文件读写类:[代码]2.测试INI文件读写:[代码]结果:[Section1]Key1=Key1's Value[Section2]Key2=Key2's Value[UseFileName]file1=value1file2=value2file... 阅读全文
posted @ 2008-07-12 15:34 Simens 阅读(1024) | 评论 (8)编辑
  
    转眼间毕业快一年多了,想想这段时间以来的经历及现在的苦恼,我决定把自己的一些想法跟博客园里面的朋友们分享一下,我现在很迷茫,希望朋友们些能给我一些指点或者建议,不知道我的路在何方?
    大三的时候开始学习.net,当时看见周围几个同学学得火热,马上也要毕业找工作了,感觉要学点专业技术才行,于是也就跟着学.net了。大学里面我学的东西很单一,毕业时还借书证时才发现自己借书总数还没超过50本,这50本书大部分是讲.net的,由于大部分书所讲的内容都差不多,以至后来对.net书籍都没多大兴趣了。学了点.net的基础知识浑浑噩噩的就毕业了。
   毕业后找到的第一份和.net开发相关的工作是家日本公司,这让我有机会尝试了一次用.net来做一个测量汽车转向角的程序,我之所以叫它程序没叫软件,在我看看我做的这个程序顶多算一个小工具而已。这个程序就是调用AD卡生产商提供的接口来控制机械设备的移动,里面用到了两个线程同时移动设备的情况。这是我认为最复杂的情况了。可悲,到现在都没有把多线程的使用搞透彻,只知道基本使用而已。整个程序就一个函数就算完成了,公司里面也就我知道一点.net皮毛,还是硬着头皮把它做完了,没想到那程序在使用过程中一直还不错。
   可能算运气好吧,浑浑噩噩的又进了第二家公司。一来分配的任务是做服务器调度软件开发。我的天!从来没做过这东西,怎么办呢?还好公司买的解决方案里面有一个用C#做的服务器程序,我不知道看了多少遍,终于莫清了来龙去脉。也没做过,只有依葫芦画瓢了。很是不巧,公司又只有我会点C#,没办法啊,要活命!还好这个东东催得不是很急,这画瓢一画就是4个月,哎,昨天联机调试转发数据成功了。大麻烦还在后面呢,图像数据的接受和转发还没做呢,郁闷。
   看起来算是比较成功了,但我总感觉我做的这东西不能算正真的软件。面向对象现在都弄清楚,但自己好像又很了解似的:无非就是把几个对象抽象出来组合组合,再继续组合就要用到高级点的设计模式了。其实我什么也不懂。
   估计本人很愚笨,学.net这么久了还没做过像样点的软件。
   我也想把开发学好,一个人学真的很费劲,看的书已经不少了,为什么感觉没多大进步呢?也许是方法不对吧,再这样下去恐怕也没什么大的提升,但我想在技术的道路上走远一些,各位朋友:能给我提点建议吗?

MSN: zhusimu@msn.com
posted @ 2008-07-11 15:26 Simens 阅读(2019) | 评论 (48)编辑
     摘要: 看到迅雷配置窗体,Alcohol 120%的配置也有这样的窗体,就连vs里面的这种布局的窗体都很多,不知道叫什么名字(各位大牛不要笑我啊),我暂且叫它Optionform或者SettingForm,感觉这种窗体还不不错,我有点想做一个才冲动了,我先来试试看:在网上东找西找发现左边是一个treeview右边是一个panel,它的原理是点击左边树节点右边显示相关内容到panel里面,但是这里是显示的另... 阅读全文
posted @ 2008-06-26 22:20 Simens 阅读(1289) | 评论 (12)编辑