Рейтинг:
12
OriginalGriff
Это будет зависеть от среды, в которой работает ваш код, но в основном: найдите все флажки в группе и подсчитайте их в цикле!
Для Winforms давайте предположим, что у вас есть ваша группа в панели (чтобы держать их вместе), и это становится довольно простым:
int count = 0;
foreach (Control c in myPanel.Controls)
{
Checkbox cb = c as Checkbox;
if (cb != null && cb.Checked) count++;
}
myLabel.Text = count.ToString();
Это будет похоже на другие среды, но это зависит от вас!
Fahim ullah
Не работает пожалуйста приведите другой пример
OriginalGriff
"Не работает", вероятно, самый бесполезный отчет о проблеме, который мы получаем, и мы получаем его много. Она ничего не говорит нам о том, что происходит или когда это происходит.
Итак, расскажите нам, что он делает, чего вы не ожидали, или не делает, что вы сделали.
Расскажите нам, что вы сделали, чтобы это произошло.
Сообщайте нам о любых сообщениях об ошибках.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.
Fahim ullah
Пожалуйста, посмотрите это и скажите мне, как я это делаю
https://drive.google.com/file/d/10HoBdr1wi3A_1OkKo8sVTkT8YYkjIIuo/view?usp=sharing
OriginalGriff
Нет, я не смотрю видео, даже когда Google закончил его "обрабатывать".
Если вы хотите поговорить, используйте клавиатуру!
Fahim ullah
Хорошо, у меня есть метка количества, и я хочу назначить значение флажка salected.
я имею в виду сначала проверить, что установлен флажок "сколько", а затем присвоить это значение метке количества
Пример :
если установлен флажок 2, то QUantityLabel.text = 2 и так далее.
я надеюсь, что вы поняли мою идею и дадите лучший ответ.
OriginalGriff
У вас уже есть лучший ответ: какая часть "это будет зависеть от среды, в которой работает ваш код" вызывает у вас проблемы?
Fahim ullah
я использую это вот так
частная AprCheckBox_CheckedChanged недействительным(объект отправителя, EventArgs в электронной)
{
int count = 0;
foreach (управление c в myPanel.Управления)
{
Флажок cb = c как флажок;
if (cb != null && cb.Checked) count++;
}
что mylabel.Текст = количество.Метод toString();
}
Ошибка № 1
Ошибка CS0103 имя 'myPanel' не существует в текущем контексте StudentManager
Ошибка № 2 CS0103 имя 'Checkbox' не существует в текущем контексте StudentManager
OriginalGriff
О-о-Фер ... :вздыхать:
Вы должны либо паниковать, либо не думать.
Почему вы решили, что я знаю название вашего пульта управления? Помните, что я не могу видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - я только получаю точно то, что вы печатаете для работы.
Поэтому, когда я пишу пример кода, мне приходится использовать заполнители для элементов, которых я не знаю: "myPanel", о котором я упоминал перед фрагментом кода в качестве элемента управления панелью, я предполагаю, что у вас есть свои флажки внутри ...
Это профессия, где вы должны думать, а не вручать "одно истинное кольцо" на тарелке, чтобы вы немедленно использовали его.
Fahim ullah
Этот AprCheckBox-это мое имя флажка, и я заменяю его, но ошибка Ошибка № 2 CS0103 имя "флажок" не существует в текущем контексте StudentManager то же самое.
не могли бы вы рассказать мне еще что-нибудь об этом плезе
OriginalGriff
Да ладно тебе! Что я говорил о мышлении?
Что я могу иметь в виду под "флажком"? Может быть, я пропустил заглавную букву? Может быть, если бы это был "флажок" вместо этого?
Вам придется думать намного сложнее, чем это, чтобы закончить курс - я бы рассмотрел другие варианты, если бы я был вами, основываясь на вашей текущей производительности ...
Fahim ullah
Теперь работайте на этот случай
Система.windows.Формы.флажок
Рейтинг:
0
BillWoodruff
Вы можете подумать о том, является ли ваша лучшая стратегия сделать что-то немедленно всякий раз, когда свойство CheckState флажка изменяется по сравнению с принятием отсроченный действие основано на считывании текущего состояния группы флажков. Вы часто находите стратегию "отложенного действия", используемую в пользовательских интерфейсах конфигурации в сочетании с кнопкой "Применить".
Небольшая вариация с использованием 'OfType< & gt; и Linq:
public int HowManyChecked(Control container)
{
return container.Controls.OfType<CheckBox>().Where(cbx => cbx.Checked).Count();
}
Примечание: это не вызовет ошибку, если нет флажков. 'OfType< & gt; требует NET FrameWork 4.5 или более поздней версии.
Однако мне кажется логичным, что вы хотели бы это сделать.
сделать нечто в зависимости от того, какие флажки установлены; так что:
public IEnumerable<CheckBox> GetCbxChecked(Control container)
{
return container.Controls.OfType<CheckBox>().Where(cbx => cbx.Checked);
}
Пример использования:
private void button1_Click(object sender, EventArgs e)
{
var chkd = GetCbxChecked(panel1);
if(chkd.Count() > 0)
{
foreach (var cbx in chkd)
{
switch (cbx.Name)
{
case "checkBox1":
break;
case "checkBox2":
break;
case "checkBox3":
break;
}
}
}
}
Maciej Los
Этот:
return container.Controls.OfType<CheckBox>().Where(cbx => cbx.Checked).Count();
может быть упрощен до:
return container.Controls.OfType<CheckBox>().Count(cbx => cbx.Checked);
Ваше здоровье!
Мацей
BillWoodruff
круто ! здесь есть несколько интересных дискуссий о том, где + count по сравнению с использованием count с функцией предиката:
https://stackoverflow.com/questions/25787555/linq-performance-count-vs-where-and-count/25789631#25789631
В зависимости от приложения я мог бы просто поддерживать список проверенных элементов управления, используя обработчик событий CheckChanged, назначенный всем флажкам, и обновляя список.
спасибо, Билл