C# - 使用字符串命名一个单选按钮并访问其属性

时间:2015-01-16 06:48:19

标签: c# string properties radio-button

我有很多重复的代码,我试图摆脱,但我有一些问题。

这是主要的一个:

我有几个计时器,都用数字标识,都有一个触发它们的按钮,但它会使相同的代码无缘无故地反复重复,例如:

private void buttonTimer1_Start_Click(object sender, EventArgs e)
    {
        if (radioButtonTimer1_CountDown.Checked)
        {

等等......

我已经能够为按钮创建一个事件并获得按钮的编号:

Button button = sender as Button;
var buttonName = button.Name;
var resultString = Regex.Match(buttonName, @"\d+").Value;
var buttonID = Int32.Parse(resultString);

所以,如果可能的话,我想做的是使用类似的东西:

if ("radioButtonTimer"+buttonID+"_CountDown".Checked)

但它无法访问该物业" .Checked"从一个字符串。

处理该问题的最佳方法是什么?我有很多文本字段,单选按钮以及我不需要做的事情"动态"那样。

非常感谢你的时间和帮助。

2 个答案:

答案 0 :(得分:1)

假设WinForms:

        Button button = sender as Button;
        var resultString = Regex.Match(button.Name, @"\d+").Value;
        Control[] matches = this.Controls.Find("radioButtonTimer"+resultString+"_CountDown", true);
        if (matches.Length > 0 && matches[0] is RadioButton)
        {
            RadioButton rb = matches[0] as RadioButton;
            if (rb.Checked)
            {
                // ... do something in here ...
            }
        }

答案 1 :(得分:1)

使用Controls.Find() - Method。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection.find%28VS.80%29.aspx

这可能是这样的:

Control[] ArrControls = this.Controls.Find("radioButtonTimer"+buttonID+"_CountDown");
if(ArrControls.Where(c => (c as RadioButton).Checked).ToList().Count > 0)
{
  // Checked Radio Buttons
}
else
{

}