C# WINFROM 中 CheckBox 共用事件

這一篇紀錄使用 C# 去寫 WINFORM 時所有的 CheckBox 使用同一個事件
這樣如果在新增選項時,就不用再去多寫相同的程式碼

像這邊有三個選項

如果是用這種寫法

1
if(checkbox1.Checked)
2
{}
3
else
4
{}

當我每新增一個選項時
我是不是就要在去多寫

1
if(checkbox2.Checked)
2
{}
3
else
4
{}
5
if(checkbox3.Checked)
6
{}
7
else
8
{}

這樣的情形
可能會讓程式碼變得有點多
並且也不好維護

這個時候如果我直接把所有的 checkbox 放在一個區塊裡 像是 panel
並且用迴圈去判斷 panel 裡的所有 checkbox
這樣當我新增一個 checkbox 時我就不用再去寫重複的程式碼
只需要特別設定 checkbox 的命名就可以了

1
private void CheckListAdd()
2
{
3
	foreach (Control c in panel1.Controls)
4
	{
5
		if (c is CheckBox)
6
		{
7
			if (((CheckBox)c).Checked == true)
8
			{
9
			
10
			}
11
		}
12
	}
13
}

我也可以寫一些 checkbox 的事件
並給所有的 checkbox 使用

1
private static List<string> CheckText = new List<string>();;
2
/// <summary>新增自定義事件,所有CheckBox_CheckedChanged共用</summary>
3
private void chk_CheckedChanged(object sender, EventArgs e)
4
{
5
	string chk = ((CheckBox)sender).Name.Substring(3, 2).ToString();	
6
	if (CheckTextLast.Contains(chk))
7
	{
8
		if (((CheckBox)sender).Checked == false)
9
		{
10
			MessageBox.Show("不加"+((CheckBox)sender).Text);
11
		}
12
	}
13
	else
14
	{
15
		CheckText.Add(((CheckBox)c).Name.Substring(3, 2).ToString());
16
	}
17
}