user995689
user995689

Reputation: 825

How to get a value from a hashtable entry

I have put all of my form controls in a hashtable thus :-

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

        }

amongst which are two radio buttons. I would like to get the value of the buttons, ie checked or unchecked, and assign them to a variable. How can I do that please. Thanks for all and any help.

Upvotes: 0

Views: 3901

Answers (4)

sll
sll

Reputation: 62514

You can retrieve a value by a key associated with it, basically control Name is a key in hashtable you've created. So if you know a name of controls you need to access:

var control = hash[radioButtonControlName] as RadioButton;

Otherwise using LINQ OfType() and 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 using foreach loop: (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;
}

Upvotes: 2

Diego
Diego

Reputation: 1569

Assuming the hashtable in your code is an instance of Hashtable:

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

You can do this:

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

Also you can see the key of the hashmap entry with:

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

That will correspond with the name of the component that you put in the hashmap (c.Name).

Hope this help you.

Upvotes: 0

L.B
L.B

Reputation: 116138

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

or if you know the name

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

Upvotes: 3

JB King
JB King

Reputation: 11910

Cast the control that is the radio button to a RadioButton Class instance and then look at the checked property. At least that would be how I've done this many times over in WebForms using similar classes.

Upvotes: 0

Related Questions