簡體   English   中英

在C#中將自定義屬性添加到單選按鈕的最佳方法

[英]Best way adding custom property to radiobutton in c#

在C#中將自定義屬性添加到單選按鈕的最佳方法是什么?

背景:

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

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

我實際上缺少的是值屬性...在大多數語言中,例如PHP復選框,至少具有3個基本屬性...

  • 名稱/類別/ ID | 識別復選框
  • 文字/標題 | (或您想調用的名稱)向用戶顯示標題
  • 價值 | 在您需要時提交的值。

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

下一個想法是創建一個從radiobutton派生的radiobutton類

class myRadioButton : RadioButton { ... }

但這是最好的方法嗎……(在我看來,這有點過分了!!),這是實現這一目標的唯一方法嗎?

我為asp添加了一些屬性到xml部分而找到了一些答案...但是我不使用asp,如果適合的話,實際上我不使用no。

如您所知,從現有RadioButton類派生是一種可能的解決方案。

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

如果要通過屬性擴展RadioButton類,我在WinForms中看不到其他方法,則按照您的描述擴展該類。 也建議這樣做。

這樣,您就可以將控件的行為清楚地分為一個類,並且不會污染您的業務邏輯。

如果您不想使用LINQ,可以使用LINQ:

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

在LINQ中,您可以編寫:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM