当前位置: 代码迷 >> C# >> CheckBox控件和Lable控件怎么关联?小虾山重水复了,大侠们请帮忙啊
  详细解决方案

CheckBox控件和Lable控件怎么关联?小虾山重水复了,大侠们请帮忙啊

热度:449   发布时间:2016-05-05 05:06:24.0
CheckBox控件和Lable控件如何关联?小虾山重水复了,大侠们请帮忙啊!
一、题目
       建立一个简单的购物计划,物品及物品单价已经列出,用户只需在购买时,选择购买的物品,在TextBox中就显示总价,按退出按钮则退出程序。
     
     物品栏 用CheckBox复选框控件;单价栏 用Lable标签控件;

     初始界面,因发不了图片,只好文字描述了。
--------------------------------------------------------
          物品                                   单价           
  口  洗发水                                    30
  口  牙膏                                        6.5
  口  牙刷                                       12.5
  口  肥皂                                        2.5

总价             口                退出
-------------------------------------------------------
二、我的努力
1、我用CheckBox复选框的Click属性实现:哪个复选框被选中,通过sender实现传递那个触发的复选框控件;
代码如下:
namespace 作业
{
    public partial class Form7 : Form
    {
        public Form7()
        {
            InitializeComponent();
        }

        double sum = 0;

       //退出
        private void btn_sum_Click(object sender, EventArgs e)
        {
            this.Close();
        }

       //通过sender实现谁触发,传递谁?
        private void chk_1_Click(object sender, EventArgs e)
        {
            CheckBox chk = sender as CheckBox;
            if (chk.Checked)
            {
                sum = sum + Convert.ToDouble(lbl_1.Text);   //这里如何实现谁触发选择相对应的价格?
                this.textBox1.Text = sum.ToString();                   // 即:洗发水选中触发,lable就选择洗发水相对应的价格,     
            }
            else
            {
                sum = sum - Convert.ToDouble(lbl_1.Text);   //这里如何实现谁触发选择相对应的价格?
                this.textBox1.Text = sum.ToString();                  //即:牙膏选中触发,lable就选择牙膏相对应的价格。
            }
        }
    }
}

三、我的求助
        我的这个代码,不能把CheckBox控件和Lable控件关联起来。即,我不能实现:选择洗发水,就选择了30元的单价,取消洗发水,就减去了30元的单价;其他几个复选框,也一样。代码中sum求和这句,怎么写能实现题目的要求?
       请各位高手大侠帮忙!小虾在此有礼了。谢谢!

------解决思路----------------------
1.复选框有checkedChange事件,可以代码绑定事件(你的复选框保证也是代码生成的)
2.这种问题,用DataGridView做要简单的多
3.控件是控件,数据是数据,你后台要有个结构来存数据,前台控件显示数据.不要一用到数据就从前台控件的属性里取,效率低下,而且耦合度太高
------解决思路----------------------
你也可以使用ListView或CheckedBoxList控件
后台数据可以是1个bool数组和1个float数组,也可以是DataTable,可以是实体类,可以是结构体,可以是二维object数组,可以是字典
总之控件是输入数据和显示数据用的,不是用来存放数据的
任何方式都比你动态放一大堆checkbox和label要好的多
------解决思路----------------------
1.控件要关联,创建个自定义控件,把checkbox和label放进去,这样处理就简单了,不需要
手动去处理联系。
2.sum的算法可以这样

float sum = 0;   //全局变量

///checkbox的选择处理
///放到checkBox1_CheckedChanged中
if(checkbox1.checked)
{
     sum += Convert.tosingle(labelValue.text);
}
else
     sum-= Convert.tosingle(labelValue.text);


------解决思路----------------------
自己将checkbox和label封装成一个用户控件,或者干脆舍弃这种方式,使用gridview等控件比较方便和直观。
  相关解决方案