Предотвратить щелчок радиокнопки - PullRequest
2 голосов
/ 10 февраля 2012

У меня есть выигрышная форма, на которой есть несколько радионеточек и меток, а также некоторые другие элементы управления, которые я генерирую во время выполнения.Не то, что я хочу, когда я проверяю радиокнопку, все радионавигационные кнопки должны быть отключены, кроме той, которую я проверял.Это относится к каждой радиопереключателю.Короче говоря, я хочу проверять по одной радионавигации за раз.

 private RadioButton GenerateRadioButton(string id)
        {
            RadioButton _radioButton = new RadioButton();
            _radioButton.Location = new Point(32, 20);
            _radioButton.Margin = new Padding(4, 4, 4, 4);
            _radioButton.Size = new Size(130, 36);
            _radioButton.Name = id;
            _radioButton.AutoSize = true;
            _radioButton.Font = new Font("Arial", 16, FontStyle.Bold);
            _radioButton.CheckedChanged += new System.EventHandler(RadioButton_CheckedChanged);
            return _radioButton;
        }

  private void RadioButton_CheckedChanged(object sender, EventArgs e)
        {
          HandleRadioButtinClick(((RadioButton)sender).Name);
            ((RadioButton)sender).Checked = true;
        }

     private void HandleRadioButtinClick(string ctrlId)
            {
                FrmSpace objFrmSpace = new FrmSpace();
                foreach (Control ctrl in pictureBox1.Controls)
                {
                    if (ctrl is Panel)
                    {
                        foreach (Control ctl in ctrl.Controls)
                        {
                            if (ctl is RadioButton && ctl.Name != ctrlId)
                                ((RadioButton)ctl).Checked = false;
                        }
                    }
                }
            }

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

Пожалуйста, предоставьте какое-нибудь решение.

Спасибо

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

Вы пытались использовать групповой блок для всех радиокнопок?Это функция по умолчанию, которую вы запрашиваете.

РЕДАКТИРОВАТЬ: чтобы уточнить ваши вопросы

        // some function
        GroupBox g = createGBox();
        this.Controls.Add(g);
        g.Controls.Add(radioButton1);
        g.Controls.Add(radioButton2);
    }

    public GroupBox createGBox()
    {
        GroupBox gBox = new GroupBox();
        gBox.Location = new System.Drawing.Point(72, 105);
        gBox.Name = "BOX";
        gBox.Size = new System.Drawing.Size(200, 100);
        gBox.Text = "This is a group box";
        return gBox;
    }
0 голосов
/ 10 февраля 2012

Поместите все radiobuttons в один и тот же GroupBox элемент управления, который вы также можете создать во время выполнения. В этом случае ожидаемое поведение должно обрабатываться самим элементом управления без необходимости кодирования.

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

...