一.編程思想
1.首先考慮需要什麼樣的界面;
2.界面中需要用到的控件,以及控件的簡單設置;
3.在不需要按鈕控件的情況下,點擊會生成按鈕的實現;
4.通過點擊後生成的菜品統計以及價格的自動計算;
二.編程核心
1.獲取控件中的內容;
2.添加按鈕點擊事件;
3.對控件中的內容封裝傳遞後並在下一步取出;
4.label控件和button控件的生成;
5.主要用到了foreach進行遍歷;
三.實現過程
1.界面的設置
本次主要用到的控件有flowLayoutPanel1和label,flowLayoutPanel:處理其組件的佈局並在流局中自動排列它們; (文本內容可以自行設置)
但是必須對flowLayoutPanel進行邊框設置,否則會不可見
2.控件的簡單設置
tag:與對象關聯的用戶自定義數據,(主要用來獲取控件的文本,tag內的內容可以自己設置,3個都要進行設置)
四.代碼實現部分
1.在窗體加載時完成的操作
在加載時用代碼進行對應菜品編號的獲取並生成對應數字的按鈕,代碼如下: private void Form1_Load(object sender, EventArgs e)
{
this.Text ="地方點餐系統";
//爲菜品添加點擊後的按鈕
//採用foreach循環進行遍歷
//control:控件類型
foreach (Control item in flowLayoutPanel1.Controls)//遍歷 flowLayoutPanel1中的控件
{
//實例化button
Button bt = new Button();
bt.Size = new Size(50,50);//設置按鈕的大小
bt.Font = new Font("楷體",20f);//設置按鈕中的字體
bt.Tag = item;//對item進行封裝以便於點擊按鈕事件時可以獲取想要的東西
//遍歷 flowLayoutPanel中的label對tag進行獲取並生成對應文本的button按鈕
foreach (Control control in item.Controls)//遍歷flowLayoutPanel1中對應的label控件
{
if (control.Tag.ToString()=="index")
{
bt.Text =control.Text;//將獲取到的control文本值賦給按鈕bt
}
}
flowLayoutPanel10.Controls.Add(bt);//向要顯示的flowLayoutPanel中添加對應的按鈕
bt.Click += Btn_Click;//添加點擊事件
bt.AutoSize = true;//自動適應內容的大小
}
}
2.當點擊對應按鈕時應該獲取到的"菜名"
private void Btn_Click(object sender, EventArgs e)
{
Button index = (Button)sender;//sender的對象是button
Control fz = (Control)index.Tag;//對獲取到的tag進行控件類型的轉換
//實例化label控件
Label lb = new Label();
lb.Font = new Font("楷體", 20f);//設置label中的字體
foreach (Control item in fz.Controls)//對獲取到tag內容的進行遍歷
{
if (item.Tag.ToString()=="name")//判斷獲取到的tag是否等於name,也就是菜名
{
lb.Text = item.Text;
}
lb.AutoSize = true;//顯示完整的label名稱
flowLayoutPanel11.Controls.Add(lb);//向要顯示的flowLayoutPanel中添加對應的label
}
3.對應的菜品價格進行相加
int count=0;//定義一個變量用於計算最下面的價格相加問題
if (item.Tag.ToString()=="money")//判斷獲取到的tag是否等於money,也就是價格
{
count += int.Parse(item.Text);
}
label27.Text = count + "元";
五.運行結果
六.案例完成難點分析
1.對於生成按鈕點擊事件
//bt爲你前面所實例化按鈕的名稱
bt.Click += Btn_Click;//添加點擊事件
bt.Click -= Btn_Click;//取消點擊事件
Button index = (Button)sender;//sender的對象是button
2.對於tag的封裝再進行獲取
bt.Tag = item;//對item進行封裝以便於點擊按鈕事件時可以獲取想要的東西
Control fz = (Control)index.Tag;//對獲取到的tag進行控件類型的轉換