2011-10-28 12 views
0

から値を取得する: - 2つのラジオボタンがあるは、どのように私はこのようにハッシュテーブルに私のフォームコントロールのすべてを入れているハッシュテーブルのエントリ

foreach (Control c in this.Controls) 
     { 
      myhash.Add(c.Name, c); 

     } 

いる間。私はボタンの値を取得したい、つまりチェックされているかチェックされておらず、それらを変数に代入したいと思います。どうすればいいですか。すべてのご協力ありがとうございます。

答えて

3
foreach (Control c in hashtable.Values) 
{ 
    if(c is RadioButton) 
    { 
     string name = x.Name; 
     bool isChecked = (c as RadioButton).Checked; 
    } 
} 

か、名前

(hashtable["name"] as RadioButton).Checked; 
+0

素晴らしい!ありがとうございました。私が望んでいたシンプルで分かりやすい答えです。 – user995689

0

ラジオボタンのコントロールをインスタンスにキャストし、次にthe checked propertyを参照してください。少なくともこれは、WebFormsで何度も同じようなクラスを使ってこれをやってきたことでしょう。

2

をわかっている場合は、基本的に名前が作成したハッシュテーブルのキーでコントロールする、それに関連付けられたキーで値を取得することができます。あなたがアクセスに必要なコントロールの名前を知っているのであれば:

var control = hash[radioButtonControlName] as RadioButton; 

をそれ以外の場合はLINQ OfType()List.ForEach()を使用して:

// OfType() does check whether each item in hash.Values is of RadioButton type 
// and return only matchings 
hash.Values.OfType<RadioButton>() 
      .ToList() 
      .ForEach(rb => { bool isChecked = rb.Checked }); 

OR foreachループを使用して: (there is a nice overview of misconception of the List.ForEach() usage

var radioButtons = hash.Values.OfType<RadioButton>(); 

foreach(var button in radioButons) 
{ 
    bool isChecked = rb.Checked; 
} 
0

あなたのコードのハッシュテーブルがHashtableのインスタンスであると仮定します:

Hashtable myhash= new Hashtable(); 
foreach (Control c in this.Controls) 
{ 
    myhash.Add(c.Name, c); 
} 

あなたはこれを行うことができます:あなたが入れたコンポーネントの名前に対応します

foreach (DictionaryEntry entry in myhash) 
{ 
    var componentName = entry.Key; 
} 

foreach (DictionaryEntry entry in myhash) 
{ 
    RadioButton rb = entry.Value as RadioButton; 
    if (rb != null) 
     bool checked = rb.Checked; 
} 

はまた、あなたが持つハッシュマップエントリのキーを見ることができますハッシュマップ(c.Name)。

ご希望の場合はこちらをご覧ください。

関連する問題