獲取C#給定對象的控制項Array的Index
這邊文基本上參考
參考的文章寫的也挺清楚的!
我個人用到不少的控制項Array, 控制項操作共通性高, 所以事件處理常常合併處理! 那麼取得是哪個控制項觸發事件的就很重要!
如下圖:
選項勾選要記錄哪項動了!
參考了別人的作法,發現用lambda function或是Tag應該都可以。大約程式如下:
private void TestOption_Load(object sender, EventArgs e)
{
chkColorOption = new CheckBox[] { chkRed, chkGreen, chkBlue, chkGrey, chkWhite, chkBlack, chkFlash };
btnSaveSetting.Enabled = false;
for (int i = 0; i < chkColorOption.Length; i++)
{
int index = i; //注意, 此項必須加!
//不然對應的delegate參數index會變成7
this.chkColorOption[i].Checked = flagColorOption[i];
this.chkColorOption[i].Tag = i; //此方法取得index其實也可以 ----
//this.chkColorOption[i].CheckedChanged += new System.EventHandler(this.chkColorOption_CheckedChanged); //傳統delegate宣告方式
this.chkColorOption[i].CheckedChanged += (s, e2) => chkColorOption_CheckedChanged(index, s, e2); //採用lambda function的變形方法
}
}
private void chkColorOption_CheckedChanged(int index, object sender, EventArgs e)
{
flagColorOption[index]=((CheckBox)sender).Checked;
int id = (int)((CheckBox)sender).Tag; //用Tag其實也可以得到index, 配合Load方法中設定的對應Tag, 這裡id與index兩個值是一樣的
settingChange = true;
btnSaveSetting.Enabled = true;
}
留言