在c#

时间:2017-07-31 08:03:57

标签: c# winforms radio-button

在c#中将自定义属性添加到单选按钮的最佳方法是什么?

背景:

我正在开发一个小的 winform 工具,并在点击执行按钮时使用2个radiobutton组来设置一些信息。现在我不想去:

if(rb1.checked){...}
if(rb2.checked){...}
//and so on...

我实际上缺少的是一种价值属性......在大多数语言中,例如PHP复选框至少有3个基本属性......

  • 名称/班级/ ID |识别复选框
  • 文字/标题 | (或者你想要的任何东西)向用户显示标题
  • 价值 |在您需要的情况下提交的值。

我想获得返回的值。例如。复选框的名称为Foo,文字或标题为Bar,但我想要的值应为hello world

接下来的想法是创建一个源自radiobutton

的radiobutton类
class myRadioButton : RadioButton { ... }

但这是最好的方式......(在我看来它有点过分了吗?!?!)这是实现这个目标的唯一途径吗?

我找到了一些回复,为asp添加了一些属性到xml部分...但我不使用asp,实际上不,如果这是可以适应的。

3 个答案:

答案 0 :(得分:2)

如您所知,从现有的RadioButton类派生是一种可能的解决方案。

但是,另一种更简单的方法是使用" Tag"在每个Winforms控件上存在(我相信)的属性。

这只是一个对象属性,供您根据需要使用。所以最简单的方法是添加一个字符串。

radioButton1.Tag = "Any string you like";

或者您可以添加自己的自定义类

MyCustomClass myObj = new MyCustomClass { MyClassName = "Class Name", MyCaption = "Caption", MyValue = "Value to add" };
radioButton1.Tag = myObj;

然后你可以在需要时使用它。

MyCustomClass newObj = radioButton1.Tag as MyCustomClass;
if (newObj != null)
{
  //do stuff here
}

答案 1 :(得分:1)

如果你想通过一个属性扩展RadioButton类,我在WinForms中看不到其他任何方法,然后按照你的描述扩展类。建议也这样做。

通过这种方式,您可以清楚地将控件的行为分成一个类,并且您不会污染您的业务逻辑。

答案 2 :(得分:1)

如果您不想参加,可以使用LINQ:

if(rb1.checked){...}
if(rb2.checked){...}
//and so on...

在LINQ中你可以写:

var checkedRadioButton = container.Controls.OfType<RadioButton>()
                                      .FirstOrDefault(r => r.Checked);