回應 RadioButton 群組中的使用者選取


最近由於承接了一個Windows Form的應用程式開發,  其中用到了RadioButton 群組, 預設他會建立控制項的 CheckedChanged 事件的處理常式。如圖:

c1

而在程式中我希望按下800*600的RadioButton就會設定變數 radioIndex = 0, 以此類推, 很正常他幫我們產生了 radioButton1_CheckedChanged 到 radioButton7_CheckedChanged事件的處理常式。不用說, 我看到重複的程式就覺得很煩很垃圾, 雖然很直覺, 但我又不是要給別人看原始碼, 能精簡就精簡。

c2

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
radioIndex = 0;
}

private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
radioIndex = 1;
}

private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
radioIndex = 2;
}

private void radioButton4_CheckedChanged(object sender, EventArgs e)
{
radioIndex = 3;
}

private void radioButton5_CheckedChanged(object sender, EventArgs e)
{
radioIndex = 4;
}

private void radioButton6_CheckedChanged(object sender, EventArgs e)
{
radioIndex = 5;
}

private void radioButton7_CheckedChanged(object sender, EventArgs e)
{
radioIndex = 6;
}

於是我用了正規表示式來拆解出到底是按了radioButton1~7中的哪一個, 來傳回不同的radioIndex值。

1. ((RadioButton)(sender)).Name.ToString() 可以抓出 radioButton1

2. new Regex(“[^0-9]").Replace(((RadioButton)(sender)).Name.ToString(), “") 可以抓出只有數字的部分, 去除字串。如 1~7,但還是字串。

3. int.Parse() 可以用來將字串String 轉換成整數 int 型態。

        private void radioButton_CheckedChanged(object sender, EventArgs e)
{
//使用正規表示式來拆解 radioButton1~7 , 取出 1~7 的數字對應 radioIndex 0~6

radioIndex = int.Parse(new Regex(“[^0-9]").Replace(((RadioButton)(sender)).Name.ToString(), “")) – 1;

//radioIndex = 0 ~ 6;
}

乾淨了~~

c3