2016-07-21 7 views
0

4つ以上のグループボックスを含むフォームがあります。各グループボックスにはテキストフィールドがいくつかあります。有効になっているグループボックスからのみ値を取得します。だから私の質問です:利用可能なグループボックスをすべてスキャンして、それらのグループボックスのいずれかが有効になっているかどうかを調べることができますか?どのグループボックスが有効になっているか見つからない

+0

はい、それは動的に有効なすべてのグループボックスを見つけることは可能だが、なぜ手動 '有効にチェックしません'各GroupBoxコントロールのプロパティ?ダイナミックにすることのメリットは何ですか?グループボックスを見つけた後、それらのグループボックスのコントロールで何をしたいのですか?それらの値をデータベースにどのように供給したいのですか。 –

+0

実際に何をしたいのですが、私はコンボボックスを持っています。それの選択に応じて、私は別のテキストボックスを持つ複数のグループボックスを持つ新しいフォームをポップアップしたい。だから、ユーザーが有効なグループボックス内のテキストボックスを塗りつぶしたら、それらの値を保存したいだけです.....私は他の無効なグループボックスからもすべてのテキスト値をチェックするコードを書いてはいけません。不要で冗長なコードの書き出し.... –

+0

たとえば、groupbox1に3つのテキストボックス、grouupbox2に5つのテキストボックスがあります。ですから、どのように動的なコードを書いて値を読み込み、別のコマンドに割り当ててdbに保存するのでしょうか。有効なグループボックスの検出は難しくありません。しかし、あなたの質問は[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のようで、おそらくあなたの元の要件は別の解決策を必要とします。 –

答えて

0

あなたはこのようにコントロールをスキャンすることができます:これはGroupBoxesはなく任意のパネルに、フォームに直接追加されていることを前提としてい

GroupBox gBox = this.Controls.OfType<GroupBox>().FirstOrDefault(c => c.Enabled); 

List<string> values = new List<string>(); 
if(gBox != null) 
{ 
    foreach(var txtBox in gBox.Controls.OfType<TextBox>()) 
    { 
     values.Add(txtBox.Text); 
    } 
} 

注意。また、TextBoxesは、パネルを追加せずにGroupBoxに直接追加されます。

代わりに、一度にそれを行うことができます。

List<string> result = this.Controls.OfType<GroupBox>() 
            .Where(gBox => gBox.Enabled) 
            .SelectMany(gBox => gBox.Controls.OfType<TextBox>()) 
            .Select(txtBox => txtBox.Text).ToList(); 
0

あなたはLINQのを使用して試すことができます。 GroupBox ESが配置されていることを提供するは直接関心の形とTextBoxは直接そのGroupBox ESにされています

string[] values = Controls 
    .OfType<GroupBox>() 
    .Where(box => box.Enabled) 
    .SelectMany(box => box 
     .Controls 
     .OfType<TextBox>() 
     .Select(tb => tb.Text)) 
    .ToArray(); 
関連する問題