在c#中将自定义属性添加到单选按钮的最佳方法是什么?
背景:
我正在开发一个小的 winform 工具,并在点击执行按钮时使用2个radiobutton组来设置一些信息。现在我不想去:
if(rb1.checked){...}
if(rb2.checked){...}
//and so on...
我实际上缺少的是一种价值属性......在大多数语言中,例如PHP复选框至少有3个基本属性......
我想获得返回的值。例如。复选框的名称为Foo
,文字或标题为Bar
,但我想要的值应为hello world
。
接下来的想法是创建一个源自radiobutton
的radiobutton类class myRadioButton : RadioButton { ... }
但这是最好的方式......(在我看来它有点过分了吗?!?!)这是实现这个目标的唯一途径吗?
我找到了一些回复,为asp添加了一些属性到xml部分...但我不使用asp,实际上不,如果这是可以适应的。
答案 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);