C# 在c中向radiobutton添加自定义属性的最佳方法#

C# 在c中向radiobutton添加自定义属性的最佳方法#,c#,winforms,radio-button,C#,Winforms,Radio Button,在c#中,向radiobutton添加自定义属性的最佳方法是什么 背景: 我正在开发一个小型winform工具,在点击执行按钮时使用两个radiobutton组来设置一些信息。现在我不想去: if(rb1.checked){...} if(rb2.checked){...} //and so on... if(rb1.checked){...} if(rb2.checked){...} //and so on... 我真正缺少的是一个值属性。。。在大多数语言中,如PHP,复选框至少有3个基本

在c#中,向radiobutton添加自定义属性的最佳方法是什么

背景:

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

if(rb1.checked){...}
if(rb2.checked){...}
//and so on...
if(rb1.checked){...}
if(rb2.checked){...}
//and so on...
我真正缺少的是一个值属性。。。在大多数语言中,如PHP,复选框至少有3个基本属性

  • Name/Class/ID|标识复选框
  • 文本/标题|(或您想叫它什么),向用户显示标题
  • |在需要时提交的值
我想得到返回的值。例如,复选框的名称是
Foo
,文本或标题是
Bar
,但我想要的值应该是
hello world

下一个想法是创建一个从radiobutton派生的radiobutton类

class myRadioButton : RadioButton { ... }
但这是最好的方法吗。。。(在我看来,这是一种压倒性的力量?!)这是实现这一目标的唯一途径吗


我发现一些asp的Answare为xml部件添加了一些属性。。。但是我不使用asp,实际上也不知道这是否合适。

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


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

如果您想通过属性扩展
RadioButton
类,那么在
WinForms
中,我看不到其他方法,然后按照您所描述的扩展该类。也建议这样做


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

如果您不想:

if(rb1.checked){...}
if(rb2.checked){...}
//and so on...
if(rb1.checked){...}
if(rb2.checked){...}
//and so on...
在LINQ中,您可以编写:

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

如果您不想使用LINQ:

if(rb1.checked){...}
if(rb2.checked){...}
//and so on...
if(rb1.checked){...}
if(rb2.checked){...}
//and so on...
在LINQ中,您可以编写:

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

正如您所确定的,从现有的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
}

正如您所确定的,从现有的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
}


Wpf?winforms?asp.net?银灯?我忘了提到其他UI框架了?对不起:D是winform。把它加到我的问题上你在做什么?Winforms?WPF?请给我们进一步的信息。Wpf?winforms?asp.net?银灯?我忘了提到其他UI框架了?对不起:D是winform。把它加到我的问题上你在做什么?Winforms?WPF?请给我们一些关于这方面的进一步信息。关于接口,这也是一种方式吗?或者我不能像我在想的那样使用它们?!?!我不确定你想把界面带到哪里,我认为界面在这里帮不了你。正如我在回答中所说:派生自定义控件是您应该更改控件行为的方式!好的,非常感谢您。我只是觉得简单地添加一个属性可能会有点力不从心,可能还有另一种简单的方法。你到底想添加什么类型的属性?这在你的问题中不是很清楚…我已经准备好了。在我的例子中,我有两个组,每个组有3台收音机。我想在每个组中返回
左、
右`或
拆分
。这也是一种方法吗?或者我不能像我在想的那样使用它们?!?!我不确定你想把界面带到哪里,我认为界面在这里帮不了你。正如我在回答中所说:派生自定义控件是您应该更改控件行为的方式!好的,非常感谢您。我只是觉得简单地添加一个属性可能会有点力不从心,可能还有另一种简单的方法。你到底想添加什么类型的属性?这在你的问题中不是很清楚…我已经准备好了。在我的例子中,我有两个组,每个组有3台收音机。我想在每个组中返回
left、
right`或
splitted
。但是在这种情况下如何设置自定义值?因为我想得到返回的值。不是名称或text.public class ValueCheckBox:System.Web.UI.WebControls.RadioButton{public string Value{get;set;}}}是什么让我回到创建从RadioButton派生的类的问题上来的:)但是谢谢linq的提示。我会投票支持它,因为它是正确的,但是“标记”解决方案是我正在搜索的缺少值属性。仍然感谢:)但是在这种情况下如何设置自定义值?因为我想得到返回的值。不是名称或text.public class ValueCheckBox:System.Web.UI.WebControls.RadioButton{public string Value{get;set;}}}是什么让我回到创建从RadioButton派生的类的问题上来的:)但是谢谢linq的提示。我会投票支持它,因为它是正确的,但是“标记”解决方案是我正在搜索的缺少值属性。还是谢谢你:)这个