在c#中向无线电按钮添加自定义属性的最佳方法是什么?
背景:
我正在开发一个小型的winform工具,并使用两个无线电按钮组来设置一些信息时,点击执行按钮。现在我不想去:
if(rb1.checked){...}
if(rb2.checked){...}
//and so on...我真正缺少的是价值财产..。在大多数语言中,例如PHP复选框至少有3个基本属性..。
我想要得到返回的值。例如,复选框的名称是Foo,文本或标题是Bar,但是我想要的值应该是hello world。
下一个想法是创建一个从无线电按钮派生出来的无线电按钮类。
class myRadioButton : RadioButton { ... }但这是最好的方法..。(在我看来,这是一种超能力?!!)这是实现这一目标的唯一途径吗?
我找到了一些asp的代码,向xml部件添加了一些属性.但是我不使用asp,如果这个合适的话,实际上也不使用。
发布于 2017-07-31 08:22:32
正如您已经指出的,从现有的RadioButton类派生是一种可能的解决方案。
但是,另一种可能更简单的方法是在每个Winforms控件上使用存在(我相信)存在的"Tag“属性。
这只是一个对象属性,您可以随意使用。所以最简单的方法就是添加一个字符串。
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
}发布于 2017-07-31 08:08:19
如果您想通过属性扩展RadioButton类,我在WinForms中看不到其他方法,然后像您所描述的那样扩展该类。还建议以这种方式这样做。
这样,您就可以将控件的行为清楚地分离到一个类中,并且不会污染您的业务逻辑。
发布于 2017-07-31 08:14:22
如果不想使用LINQ,可以使用:
if(rb1.checked){...}
if(rb2.checked){...}
//and so on...在LINQ中你可以写:
var checkedRadioButton = container.Controls.OfType<RadioButton>()
.FirstOrDefault(r => r.Checked);https://stackoverflow.com/questions/45410395
复制相似问题