2017-07-31 8 views
0

C#のラジオボタンにカスタムプロパティを追加する最も良い方法は何ですか?Cのラジオボタンにカスタムプロパティを追加するベストな方法#

背景:

私は小さなWinフォームツールを開発し、実行ボタンを押す際に、いくつかの情報を設定するために2つのラジオボタングループを使用しています。今私は行きたくありません:

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

私が実際に欠いているのは、値のプロパティです。 PHPのチェックボックスは、少なくとも3不可欠propertys ...

  • 名/クラス/ IDを持っています|チェックボックスを識別する
  • テキスト/キャプション | (またはこれまでに呼びたいもの)をユーザーに表示する
  • |あなたがそれを必要とする場合に提出される値。

返された値を取得したいと思います。例えば。チェックボックスの名前はFooで、テキストまたはキャプションはBarですが、値がhello worldである必要があります。

次の思考は、ラジオボタン

class myRadioButton : RadioButton { ... } 

から派生しかし、このための最良の方法ですRadioButtonクラスを作成することだった...とある(それは?!?!overpowerdの一種であるように私には思えます)これはこれを達成する唯一の方法ですか?

xmlの部分にいくつかの属性を追加するためのいくつかの回答が見つかりました...しかし、私はaspを使用せず、実際にはこれをスイートにすることはできません。

+2

Wpf? winforms? asp.net?シルバーライト?私が言及して忘れていくつかの他のUIフレームワーク? –

+0

申し訳ありません:D yes winform。私の質問に追加しました – Dwza

+0

何を使っていますか? Winforms? WPF?それについてさらに詳しい情報をお知らせください。 –

答えて

2

をして、識別してきたように、既存のRadioButtonクラスから派生しています1つの可能な解決策。

しかし、もっと簡単な方法は、すべての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 
} 
+1

これは実際に不足しているプロパティです。どうもありがとうございました!これが他の人々にも役立つことを願っています。 – Dwza

1

RadioButtonクラスをプロパティで拡張したい場合は、WinFormsに他の方法はありません。このようにすることもお勧めします。

このようにすると、コントロールの動作がクラスに明確に分離され、ビジネスロジックが汚染されることはありません。あなたがのために行くにしたくない場合は

+0

これはどのようなインターフェースにも当てはまりますか?または私はそれについて考えているように私はそれらを使用することはできません..?!?! – Dwza

+0

私はどこでインターフェースを使いたいのか分かりませんが、そのインターフェースがここで助けになるとは思いません。私が答えて言ったように:カスタムコントロールを導き出すことは、あなたが**コントロールの動作を変えるべきかどうかです! – derape

+0

よろしくお願いいたします。私はちょうど1つのプロパティを追加するためにこれは少し圧倒される可能性があり、他の簡単な方法があるかもしれないと思った。 – Dwza

1

あなたはLINQを使用することができますLINQで

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

を次のように記述することができます:

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

関連する問題