新闻  |   论坛  |   博客  |   在线研讨会
C#下菜农调试通过的遍历CheckBox组件之方法
tvb2058 | 2009-01-04 11:07:06    阅读:4385   发布文章

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

所以用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组排序不一致,所以后者的遍历方法要简单许多.

如图所示:

点击开大图

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客