ограниченная проверка CheckBox в C # - PullRequest
3 голосов
/ 28 апреля 2011

Я сделал форму выигрыша и поставил несколько флажков, которые показывают доступные курсы для студента, и, установив флажок, он сможет сказать, какие курсы он хочет пройти, но я хочу отменить его, когда он проверит три курсаесли он попытается установить четвертый флажок, то должно появиться окно с сообщением о том, что он не может выбрать больше трех, и четвертый флажок не должен быть установлен.Так как я могу это сделать?

Ответы [ 5 ]

5 голосов
/ 28 апреля 2011

Вы должны реализовать обработчик OnCheckedChange и установить его для каждого флажка.Это увеличивает / уменьшает счетчик, в зависимости от состояния флажка.

    private int checkCounter;

    private void OnCheckedChanged(object sender, EventArgs e)
    {
        // Increase or decrease the check counter
        CheckBox box = (CheckBox) sender;
        if (box.Checked)
            checkCounter++;
        else
            checkCounter--;

        // prevent checking
        if (checkCounter == 4)
        {
            MessageBox.Show("YOU ARE EVIL", "Bad");
            box.Checked = false;
        }

    }

Если ваш счет достигнут, вы можете вывести окно сообщения и сбросить флажок.Вот и все.

И не забудьте применить этот обработчик для всех событий CheckedChange флажков.

4 голосов
/ 28 апреля 2011

Я бы порекомендовал вам использовать CheckedListBox при работе с неизвестным количеством опций. Вот полный пример, который показывает, как использовать событие ItemCheck для ограничения общего числа выборов.

var box = new CheckedListBox
    {
        Dock = DockStyle.Fill,
        CheckOnClick = true
    };
box.ItemCheck += (sender, e) =>
    {
        // is the item being checked when 3 are already checked?
        if (e.NewValue == CheckState.Checked && box.CheckedItems.Count == 3)
        {
            // block the change
            e.NewValue = CheckState.Unchecked;
        }
    };
for (var i = 0; i < 10; i++)
{
    box.Items.Add("item " + i);
}
new Form {Controls = {box}}.ShowDialog();

Edit: Вы можете создать сгруппированный вид, удалив границы списка, вложив его в GroupBox и изменив цвет фона.

box.BorderStyle = BorderStyle.None;
box.BackColor = Control.DefaultBackColor;
box.MultiColumn = true;
box.IntegralHeight = false;
var group = new GroupBox
    {
        Text = "Options",
        Dock = DockStyle.Fill,
        Controls = {box}
    };

Group Check Box

2 голосов
/ 28 апреля 2011

Вам придется запустить один и тот же обработчик событий для всех событий CheckedBoxes CheckChanged.

CheckBox1.CheckedChanged += new System.EventHandler(MyCheckedChanged)
CheckBox2.CheckedChanged += new System.EventHandler(MyCheckedChanged)

private void MyCheckedChanged(object sender, EventArgs e)
{
      CheckBox checkbox = sender as CheckBox;

      // Check all the checked items. If already 3 selectec
      checkbox.Checked = false;
 }
1 голос
/ 28 апреля 2011

Если вы используете WinForms, элемент управления CheckBox имеет событие OnCheckStateChanged.Подключите события всех ваших флажков для вызова другой функции.В этой функции вы можете отслеживать общее количество отмеченных флажков и отображать всплывающее окно, чтобы сообщить пользователю о достижении максимального значения.

1 голос
/ 28 апреля 2011

Используйте событие CheckChanged флажка и подсчитайте текущее количество отмеченных флажков в форме, затем отобразите окно сообщения и снимите флажок, который вызвал событие, если оно в настоящее время превышает 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...