Как получить значение из записи хеш-таблицы

#c# #winforms #controls #hashtable

#c# #winforms #элементы управления #хеш-таблица

Вопрос:

Я поместил все свои элементы управления формами в хеш-таблицу таким образом :-

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

        }
 

среди которых есть два переключателя. Я хотел бы получить значение кнопок, т.Е. Отмеченных или непроверенных, и присвоить их переменной. Как я могу это сделать, пожалуйста. Спасибо за всю и любую помощь.

Ответ №1:

 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:

Вы можете получить значение по связанному с ним ключу, в основном имя элемента управления — это ключ в созданной вами хэш-таблице. Итак, если вы знаете имя элементов управления, к которым вам нужно получить доступ:

 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 цикла:
(есть хороший обзор неправильного представления о списке.Использование ForEach())

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

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

Ответ №3:

Приведите элемент управления, который является переключателем, к экземпляру класса RadioButton, а затем посмотрите на свойство checked . По крайней мере, так я делал это много раз в WebForms, используя похожие классы.

Ответ №4:

Предполагая, что хеш-таблица в вашем коде является экземпляром 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 ).

Надеюсь, это поможет вам.