2017-11-01 33 views
1

チェックボックスがオンになっているかどうかをチェックするプログラムを作成中です。次に、textプロパティを使用してさらに処理します。 私はユーザーに独自の値を入力するためのnumericUpDownボックスを追加しました。今まで私はすべてのチェックボックスを繰り返してチェックしているかどうかを確認しています。しかし、今度はチェックボックスを繰り返したいのですが、そのうちの1つがチェックされていれば、チェックボックスの下のnumericUpDownボックスのNumberを取得したいと思います。異なるコントロールタイプ(チェックボックスとテキストボックス)を組み合わせて同時にC#で組み合わせる方法

enter image description here

一度チェックボックスとNumericUpDownをボックスを反復処理するための最良の方法は何ですか? グループ化する必要がありますか?またはそれらを余分なパネルに入れますか?

foreach (Control c in panel1.Controls) 
    { 
     if ((c is CheckBox) && ((CheckBox)c).Checked) 
     { 
     //Do some stuff 
     } 
    } 

私は私の悪い英語のため申し訳ありませんし、誰かが助けることができると思います。ここでは

は私が今までチェックボックスを反復処理する方法です。ありがとうございました。

+3

のUserControlではい、グループチェックボックスとNumericUpDownを。今は物事は自然に関連しています。 – LarsTech

+0

ラースが言ったこと。または、これを捨てて、MVVMを使用してください。ここでは、このようなことが簡単な作業になります。 – Will

+0

一度に1つのチェックボックスしかチェックされていない場合は、ラジオボタンを使用する方がよいことに注意してください。 –

答えて

2

ラースは、チェックボックスとNumericUpDownを一緒に良いアイデアであるグループのユーザーコントロールを作成し、示唆したように:

public partial class ToggleNumericControl : UserControl 
{ 
    public ToggleNumericControl() 
    { 
     InitializeComponent(); 
    } 

    public override string Text 
    { 
     get { return checkBox.Text; } 
     set { checkBox.Text = value; } 
    } 

    public bool Checked 
    { 
     get { return checkBox.Checked; } 
     set { checkBox.Checked = value; } 
    } 

    public decimal Value 
    { 
     get { return numericUpDown.Value; } 
     set { numericUpDown.Value = Value; } 
    } 
} 

あなたは、当然のことながら、ここで追加の機能を実装することができます。例えば。チェックボックスがオフの場合はnumericUpDownを無効にします。

置き、そのようなコントロールあなたに形成し、その後、あなたは、このようにチェック値を選択することができます。

var selectedValues = from tn in panel1.Controls.OfType<ToggleNumericControl>() 
        where tn.Checked 
        select tn.Value; 
+0

ありがとうございました!しかし、私は他の質問があります。スクリーンショットで確認できるように、checkBoxesの名前は異なります。チェックボックスのテキストがすでにユーザーコントロールにバインドされている場合、そのテキストを変更する方法はありますか?つまり、テキストを手動で設定できるTextプロパティはありますか?あるいは私はこれをプログラマティックにやらなければならないのですか?ありがとうございました! –

+1

@SardarAgabejliはい、ユーザーコントロールには、テキストプロパティの 'Text'プロパティがあります。これにより、チェックボックステキストの値を書き込み、読み取ることができます。しかし、このテキストのスペースについて考える必要があります。幅を固定するか、サイズ変更可能にする必要があります(たとえば、両方のコントロールをテーブルレイアウトパネルに配置するなど) –