原创 C#下菜农调试通过的遍历CheckBox组件之方法

2008-11-2 22:37 3421 7 12 分类: 软件与OS

遍历组件是通常很需要的,因为它们很有规律且遵守一定的算法。


所以用for循环搜索会使代码简洁。特别是不同分组时。


下面是3组CheckBox组件,它们用以表示2进制数。


当然也可用TextBox组件显示'1'或'0'.


遍历组件组件有很多方法,也可用组件数组。(感觉此法很笨)


通常可用下列方法(一组):


            for (int i = 0; i < 8; i++)
            {
                switch (i)
                {
                    case 0:
                        checkBox8.Checked = (pdwPortVal & (1 << i)) != 0;
                        break;
                    case 1:
                        checkBox7.Checked = (pdwPortVal & (1 << i)) != 0;
                        break;
                    case 2:
                        checkBox6.Checked = (pdwPortVal & (1 << i)) != 0;
                        break;
                    case 3:
                        checkBox5.Checked = (pdwPortVal & (1 << i)) != 0;
                        break;
                    case 4:
                        checkBox4.Checked = (pdwPortVal & (1 << i)) != 0;
                        break;
                    case 5:
                        checkBox3.Checked = (pdwPortVal & (1 << i)) != 0;
                        break;
                    case 6:
                        checkBox2.Checked = (pdwPortVal & (1 << i)) != 0;
                        break;
                    case 7:
                        checkBox1.Checked = (pdwPortVal & (1 << i)) != 0;
                        break;
                }
            }


利用C指针的概念,用Controls.Find()方法将使代码简洁许多:


            for (int i = 8; i >= 1; i--)//checkBox8..1
            {
                ((CheckBox)this.Controls.Find("checkBox" + i, true)[0]).Checked = (pdwPortVal & (1 << (8 - i))) != 0;
            }


同理其他组:


            for (int i = 9; i <= 16; i++)//checkBox9..16

            {
                ((CheckBox)this.Controls.Find("checkBox" + i, true)[0]).Checked = (pdwPortVal & (1 << (i - 9))) != 0;
            }


由于2组排序不一致,所以后者的遍历方法要简单许多.


如图所示:


点击开大图


 


菜农HotPower@126.com  2008.11.2 于菜地

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

雁塔菜农 2008-11-5 20:29

谢谢Ice_Age,我已按组框调通,效率不知谁高?

用户178887 2008-11-4 21:53

你可以把3组checkbox放入groupbox, panel 等container中,checkbox的索引值放入 tabindex或tag中,则程序很简洁。

雁塔菜农 2008-11-4 18:57

谢谢ice_age.本来foreach是用于遍历的,可本例是3组,故和索引值有关,而foreach和索引值有关时应用反而不好~~~ 所以主题的“遍历”有些误导~~~

用户178887 2008-11-3 22:29

Sorry, 这个论坛有问题,我还以为没有贴出

用户178887 2008-11-3 22:13

foreach (Control c in Controls) { if (c is CheckBox) { ((CheckBox) c).Checked = pdwPortVal & (1 << c.TabIndex)) } } index 也可以放在 Tag 中。
相关推荐阅读
雁塔菜农 2012-04-05 17:51
2012年度新唐Cortex-M0助学开发套件有约束条件赠送申报贴
2012年度新唐Cortex-M0助学套件从4月起每月有约束条件发放16套。 申报人必须是21ic或 EDNC 会员 并具备1月的会龄。 申报时必须注明“遵守约束条件,缴纳250元订金,上...
雁塔菜农 2012-04-05 17:04
2012年度Cortex-M0助学园地推广框图
...
雁塔菜农 2012-04-01 17:59
2012年度Cortex-M0助学园地奖励计划细则
抢楼请点击:菜地公告:即日起创建《菜农Cortex-M0助学园地》(盖楼入口) 每月10号和25号的下午2:50进行2次抢楼,规则同去年12月的疯狂抢楼活动。 奖品由21IC、北航、广州迪圣...
雁塔菜农 2012-02-03 08:19
菜农谋略:搞定牛人宋俊德,对女牛人孙昌旭说:“记住,俺是雁塔菜农~~~ ”
http://www.baidu.com/s?wd=%B2%CB%C5%A9%D0%A6%CC%B8%A1%B6%D0%C2%C0%CB%C3%FB%C8%CB%D0%A7%D3%A6%A1%B7...
我要评论
5
7
关闭 站长推荐上一条 /3 下一条