如何从哈希表条目中获取值

时间:2011-10-28 19:33:55

标签: c# winforms controls hashtable

我已将所有表单控件放在哈希表中: -

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

        }

其中有两个单选按钮。我想获取按钮的值,即选中或取消选中,并将它们分配给变量。我该怎么办呢。感谢所有人和任何帮助。

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

您可以通过与之关联的键检索值,基本上控制Name是您创建的哈希表中的键。因此,如果您知道需要访问的控件名称:

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 } );

或使用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;
}

答案 2 :(得分:0)

将作为单选按钮的控件转换为RadioButton Class实例,然后查看the checked property。至少那就是我在WebForms中使用类似的类多次完成这些操作。

答案 3 :(得分:0)

假设代码中的哈希表是Hashtable的一个实例:

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

你可以这样做:

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

您还可以看到hashmap条目的键:

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

这将与您放在hashmap(c.Name)中的组件的名称相对应。

希望这对你有所帮助。