点餐案例
在设计案例之前,我们需要先对点餐界面进行布局设计
如下图所示,对界面进行布局设计.
添加tag标签
为了以后方便获取FlowLayoutPanel中控件的数据,所以我们给FlowLayoutPanel中的所有label添加tag标签
其中我们把所有label前面的编号标签设置为bh
所有label中间的菜名标签设置为cm
所有label后面的价格标签设置为jg
然后再进行点餐案例具体步骤
private void Form1_Load(object sender, EventArgs e)
{
//根据flowLayoutPanel中的菜的数量,添加对应的序号按钮
foreach (Control item in flowLayoutPanel2.Controls)//这个循环就是找到菜单中所有的flowLayoutPanel控件还包含其中的label控件集合
//foreach控件循环表示在flowLayoutPanel2(菜单的控件)的控件集合中,进行一个遍历()挨个获取
{
//使用代码创建按钮,
Button but = new Button();//使用关键字new,创建button对象(实例化)
but.Tag = item;//将flowLayoutPanel控件中的子flowLayoutPanel控件赋值给按钮的标签
foreach (Control abcd in item.Controls)
//这个循环是找到每一个flowLayoutPanel控件中子控件的label控件
{
if (abcd.Tag.ToString() == "bh")//判断tag属性值,如果这个控件的tag为bh,那就说明是编号.
{
but.Text = abcd.Text;//获取对应的控件中的文本
}
}
flowLayoutPanel10.Controls.Add(but);//将获取的文本放在flowLayoutPanel10控件中,自动排序生成按钮
but.Click += But_Click;//建立but的click事件
// but.Click -= But_Click;
}
}
int zj = 0;//定义一个求和计算总价
private void But_Click(object sender, EventArgs e)
{
//MessageBox.Show("121212");
Button fqz = (Button)sender;//类型转换
//sender表示事件的发起者,那个对选哪个触发事件,那么sender就是谁
Label lab = new Label();//使用关键字new,创建label对象(实例化)
Control zkj = (Control)fqz.Tag;//获取到编号对应的菜单子控件
//获取flowLayoutPanel控件中每一个子flowLayoutPanel控件中的的菜名还有价格.
foreach (Control item in zkj.Controls)
//这个foreach循环表示在zkj中进行遍历找到所有的子控件
{
if (item.Tag.ToString() == "cm")//遍历时判断tag属性值,如果这个控件的tag为cm
{
lab.Text = item.Text;//则获取对应控件的文本放在lab中
}
if (item.Tag.ToString() == "jg")//遍历时判断tag属性值,如果这个控件的tag为jg
{
zj += int.Parse(item.Text);//则获取控件的文本进行求和放在zj中
}
}
flowLayoutPanel11.Controls.Add(lab);//将获取的文本放在flowLayoutPanel11控件中
label27.Text = zj + "元";//将获取的文本求和以后的价格放在label27控件中
}
}
}