C# - 使用字符串命名单选按钮并访问其属性
C# - Name a radio button with a string and access its properties
我有很多重复的代码,我正试图摆脱它们,但我遇到了一些问题。
这是主要的:
我有几个计时器,都用数字标识,都有一个按钮来触发它们,但它会无缘无故地重复相同的代码,例如:
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”。
处理该问题的最佳方法是什么?我有很多文本字段、单选按钮以及不需要的东西 "dynamic"。
非常感谢您的宝贵时间和帮助。
假设 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 ...
}
}
使用 Controls.Find()-方法。
这可能是这样的:
Control[] ArrControls = this.Controls.Find("radioButtonTimer"+buttonID+"_CountDown");
if(ArrControls.Where(c => (c as RadioButton).Checked).ToList().Count > 0)
{
// Checked Radio Buttons
}
else
{
}
我有很多重复的代码,我正试图摆脱它们,但我遇到了一些问题。
这是主要的:
我有几个计时器,都用数字标识,都有一个按钮来触发它们,但它会无缘无故地重复相同的代码,例如:
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”。
处理该问题的最佳方法是什么?我有很多文本字段、单选按钮以及不需要的东西 "dynamic"。
非常感谢您的宝贵时间和帮助。
假设 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 ...
}
}
使用 Controls.Find()-方法。
这可能是这样的:
Control[] ArrControls = this.Controls.Find("radioButtonTimer"+buttonID+"_CountDown");
if(ArrControls.Where(c => (c as RadioButton).Checked).ToList().Count > 0)
{
// Checked Radio Buttons
}
else
{
}