[C#學習筆記17]控件集合、事件統(tǒng)一關聯、Tag數據存、對象與集合綜合
事件的集中響應
????原理:就是相同的控件,可以關聯同一個事件響應方法。
????好處:我們可以集中處理數據
????核心內容:按鈕的集中添加和Tag數據的封裝、窗體Controls集合的用途、通過遍歷Controls集合優(yōu)化事件關聯。
事件通用處理中數據的獲取
????核心內容:在按鈕事件中獲取Tag數據的方法、對象的封裝、泛型集合List運用
按鈕屬性:邊框FlatStyle選擇Flat扁平化,背景色藍色,字體白色微軟雅黑加粗小四
Tag填入數據,比如1111,11
用之前寫過的類Course
?/// <summary>
? ? /// 課程類
? ? /// </summary>
? ? public class Course?
? ? {
? ? ? ? public Course() { }
? ? ? ? public Course(int courseId, string courseName, int classHour, string teacher)
? ? ? ? {
? ? ? ? ? ? this.CourseId = courseId;
? ? ? ? ? ? this.CourseName = courseName;
? ? ? ? ? ? this.ClassHour = classHour;
? ? ? ? ? ? this.Teacher = teacher;
? ? ? ? }
? ? ? ? public int CourseId { get; set; }//課程編號
? ? ? ? public string CourseName { get; set; }//課程名稱
? ? ? ? public int ClassHour { get; set; }//課時
? ? ? ? public string Teacher { get; set; }//主講老師
}
????public partial class FrmEventApp : Form
? ? {
? ? ? ? //用來封裝課程對象的容器
? ? ? ? private List<Course> courseList = new List<Course>();
? ? ? ? public FrmEventApp()
? ? ? ? {
? ? ? ? ? ? InitializeComponent();
? ? ? ? ? ? //多個按鈕響應同一個事件,在此做事件關聯
? ? ? ? ? ? //this.btn01.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //this.btn02.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //this.btn03.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //this.btn04.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //this.btn05.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //this.btn06.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //this.btn07.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //this.btn08.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //this.btn09.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //this.btn10.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //this.btn11.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //this.btn12.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? //以上方法,如果你這么寫程序,會被別人認為你什么都不懂!
? ? ? ? ? ? foreach (Control item in this.Controls)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //if (item is Button)//通過控件類型過濾不需要的控件
? ? ? ? ? ? ? ? //{
? ? ? ? ? ? ? ? //? ? Button btn = item as Button;//轉換成Button
? ? ? ? ? ? ? ? //? ? if (btn.Tag.ToString() != "Save")//過濾不需要的按鈕,特別注意Tag的使用
? ? ? ? ? ? ? ? //? ? {
? ? ? ? ? ? ? ? //? ? ? ? btn.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? ? ? //? ? }
? ? ? ? ? ? ? ? //}
? ? ? ? ? ? ? ? if (item is Button && item.Tag.ToString() != "Save")
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? item.Click += new System.EventHandler(this.btn_Click);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //事件集中處理方法
? ? ? ? private void btn_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? Button btn = sender as Button;
? ? ? ? ? ? //將當前按鈕Tag屬性中封裝的課程信息,通過字符串分割得到
? ? ? ? ? ? string[] info = btn.Tag.ToString().Split(',');
? ? ? ? ? ? //將當前課程信息封裝到課程對象,并將課程對象封裝到集合中
? ? ? ? ? ? this.courseList.Add(new Course
? ? ? ? ? ? {
? ? ? ? ? ? ? ? CourseName = btn.Text,
? ? ? ? ? ? ? ? CourseId = Convert.ToInt32(info[0]),
? ? ? ? ? ? ? ? ClassHour = Convert.ToInt32(info[1])
? ? ? ? ? ? });
? ? ? ? ? ? //改變當前按鈕的背景色
? ? ? ? ? ? btn.BackColor = Color.Green;
? ? ? ? ? ? //請大家思考:如果避免用戶多次添加同一個課程按鈕,而導致多次添加的問題...
? ? ? ?}
? ? ? ? //保存所選課
? ? ? ? private void btnSave_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? //實際開發(fā)中,保存可以到數據庫、文件...
? ? ? ? ? ? //測試看看所選擇的課程
? ? ? ? ? ? foreach (var item in this.courseList)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine(item.CourseId+"\t"+item.ClassHour+"\t"+item.CourseName);
? ? ? ? ? ? }
? ? ? ? }
? ? }