【问题标题】:Best way adding custom property to radiobutton in c#在 C# 中向单选按钮添加自定义属性的最佳方法
【发布时间】:2018-01-06 16:50:22
【问题描述】:

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

背景:

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

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

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

  • 姓名/班级/ID |识别复选框
  • 文字/说明 | (或者你想怎么称呼它)向用户显示标题
  • 价值 |在您需要时提交的值。

我想得到返回的值。例如。复选框的名称是Foo,文本或标题是Bar,但我想要的值应该是hello world

下一个想法是创建一个从单选按钮派生的单选按钮类

class myRadioButton : RadioButton { ... }

但这是最好的方法吗...(在我看来它有点过于强大了?!?!)这是实现这一目标的唯一方法吗?

我找到了一些 asp 的答案,将一些属性添加到 xml 部分......但我不使用 asp,如果这适合的话,实际上也没有。

【问题讨论】:

  • Wpf?表格? ASP.NET?银光?其他一些我忘了提的 UI 框架?
  • 抱歉 :D 是的 winform。将其添加到我的问题中
  • 你在做什么?窗体? WPF?请向我们提供更多相关信息。

标签: c# winforms radio-button


【解决方案1】:

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

这样你就可以清楚地将控件的行为划分到一个类中,并且不会污染你的业务逻辑。

【讨论】:

  • 接口怎么样?这也是一种方法吗?或者我不能像我想的那样使用它们.. ?!?!
  • 我不确定你想用接口去哪里,我认为接口在这里不能帮助你。就像我在回答中所说的那样:派生自定义控件是您应该更改控件行为的方式!
  • 好的,非常感谢。我只是认为这对于简单地添加一个属性可能有点过于强大,可能还有另一种简单的方法。
  • 您还想添加什么样的属性?你的问题不是很清楚......
  • 我已经添加了。就我而言,我有 2 组,每组 3 台收音机。我想在每个组中返回 left, right` 或 splitted
【解决方案2】:

如果你不想这样做,你可以使用 LINQ:

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

在 LINQ 中你可以这样写:

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

【讨论】:

  • 但在这种情况下如何设置自定义值?因为我想返回那个值。不是名称或文字。
  • 公共类 ValueCheckBox : System.Web.UI.WebControls.RadioButton { public string Value { get;放; } }
  • 是什么让我回到了创建一个派生自单选按钮的类的问题上。 :) 但感谢 linq 提示。
  • 不赞成投票,因为它是正确的,但“标签”解决方案是我正在寻找的一种缺失值属性。还是谢谢你:)
【解决方案3】:

如您所见,从现有 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
}

【讨论】:

  • 这实际上是缺少的属性。非常感谢!我希望这对其他人也有帮助。
猜你喜欢
  • 2012-10-27
  • 2013-10-10
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
相关资源
最近更新 更多