#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 ).
Надеюсь, это поможет вам.