獲取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;
        }

留言

這個網誌中的熱門文章

C# 不規則陣列不定長度設定方法

多維陣列的Resize

C#利用DateTime估計程式執行時間