2017-07-31 37 views
0

什麼是自定義屬性添加到在C#中的單選按鈕的最好方法?最好的方法添加自定義屬性在C#中RADIOBUTTON

背景:

我正在開發一個小WinForm的工具,並使用2組單選按鈕來設置一些信息,擊中執行按鈕時。現在我不想去:

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

我實際上缺少的是值屬性...在大多數語言如PHP複選框至少有3個重要的propertys ...

  • 名稱/等級/ ID |識別複選框
  • 文/標題 | (或你想要什麼都稱呼它)向用戶顯示的標題
  • 價值 |在需要時提交的值。

我想要得到的返回值。例如。複選框的名稱是Foo,文本或標題是Bar,但我想要的值應該是hello world

接下來的想法是創建一個從單選

class myRadioButton : RadioButton { ... } 

派生但是,這是最好的方式單選按鈕類...(在我看來就像是一種overpowerd的?!?!),並這是實現這一目標的唯一方法?

我發現了一些的answere爲ASP添加一些屬性的XML部分...但我不使用ASP和實際不沒有,如果這是suiteable。

+2

Wpf?的WinForms? asp.net? Silverlight的?我忘了提一些其他的UI框架? –

+0

對不起:D是winform。添加到我的問題 – Dwza

+0

你在做什麼?的WinForms? WPF?請給我們一些進一步的信息。 –

回答

2

正如你已經確定,獲得從現有的單選按鈕類一種可能的解決方

但是,另一種可能更簡單的方法是使用每個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 
} 
+1

這實際上是缺少的財產。非常感謝你!我希望這也能幫助其他人。 – Dwza

1

如果你想通過屬性擴展RadioButton類,我在WinForms中看不到任何其他方式,然後如你所描述的那樣擴展這個類。也建議這樣做。

通過這種方式,您可以清楚地將控件的行爲分爲一類,而且不會污染業務邏輯。

+0

接口又如何呢?或者我不能像使用它們一樣使用它們..?!?! – Dwza

+0

我不確定你想用接口去哪裏,我不認爲這個接口可以幫助你。就像我在答案中所說的:派生自定義控件是他們應該改變控件行爲的方式! – derape

+0

好的,非常感謝。我只是認爲這可能會有點壓倒一切只是增加一個屬性,並可能有其他簡單的方法。 – Dwza

1

您可以使用LINQ如果你不想去:

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

在LINQ可以這樣寫:

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

但在這種情況下如何設置自定義值?因爲我想獲得返回的值。不是名稱或文本。 – Dwza

+1

公共類ValueCheckBox:System.Web.UI.WebControls.RadioButton { public string Value {get;組; } } –

+1

是什麼讓我回到創建從單選按鈕派生的類的問題。 :)但感謝linq提示。 – Dwza