Как заставить usercontrol вести себя как radiobutton - PullRequest
3 голосов
/ 27 ноября 2009

Я разрабатываю кнопку вкладки в качестве пользовательского элемента управления, как я могу сделать так, чтобы она работала как радио-кнопка. «Когда пользователь выбирает одну опциональную кнопку (также известную как радиокнопка) в группе, остальные автоматически очищаются». спасибо.

Ответы [ 5 ]

4 голосов
/ 27 ноября 2009

Скажите, что ваша пользовательская вкладка Control имеет имя MyTabButton, Переопределить и реализовать Равные, и затем в обработчике события Click в вашем пользовательском классе управления,

if (this.Checked)
   foreach(Control myBut in Parent.Controls)
       if (myBut is MyTabButton && !myBut.Equals(this))
          myBut.Checked = false;
2 голосов
/ 27 ноября 2009

Если вы хотите поведение переключателей, используйте переключатели.

Используйте javascript, чтобы скрыть переключатели и создать кнопки вкладок вместо оригинальных переключателей. Поток событий щелчка от кнопки вкладки до оригинального переключателя. Вы также можете захотеть иметь общее событие для отмены выбора других кнопок вкладки.

Ваши кнопки также будут хорошо работать, если JavaScript отключен.

Поскольку вы упомянули, что используете winforms, вместо Javascript вы можете переопределить метод рисования производным классом RadioButton, чтобы нарисовать вашу Radiobutton в качестве вкладки. Вот базовый пример

public class ButtonRadioButton : RadioButton {

    protected override void OnPaint(PaintEventArgs e) {
        PushButtonState state;
        if (this.Checked)
            state = PushButtonState.Pressed;
        else
            state = PushButtonState.Normal;

        ButtonRenderer.DrawButton(e.Graphics, e.ClipRectangle, state);
    }

}
1 голос
/ 27 ноября 2009

очевидно, что вам нужен контейнер для кнопки, и всякий раз, когда выбирается usercontrol, запускается событие для контейнера, и контейнер отменяет выбор другого usercontrol

0 голосов
/ 04 ноября 2017

Отредактировано, чтобы включить ответ

Этого можно добиться, переопределив событие OnClick или OnMouseClick. Я не понимаю, что вы имеете в виду под «очисткой кнопки», поэтому я просто изменяю ее задний цвет. Вы можете легко адаптировать его к вашей собственности или другим потребностям.

using System;
using System.Linq;
using System.Windows.Forms;

namespace StackOverflow
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }
    }

    public partial class MyRadioButton : Button
    {
        //Override OnClick event. - THIS IS WHERE ALL THE WORK IS DONE
        protected override void OnClick(EventArgs e)
        {
            do
            {
                /*
                    This is where you select current MyRadioButton. 
                    I'm changing the BackColor for simplicity. 
                */
                this.BackColor = System.Drawing.Color.Green;

                /*
                   If parent of current MyRadioButton is null, 
                   then it doesn't belong in a group.
                */
                if (this.Parent == null)
                    break;

                /*
                    Else loop through all other MyRadioButton of the same group and clear them. 
                    Include System.Linq for this part.
                */
                foreach (MyRadioButton button in this.Parent.Controls.OfType<MyRadioButton>())
                {
                    //If button equals to current MyRadioButton, continue to the next RadioButton
                    if (button == this)
                        continue;

                    //This is where you clear other MyRadioButton
                    button.BackColor = System.Drawing.Color.Red;
                }
            }
            while (false);

            //Continue with the regular OnClick event.
            base.OnClick(e);
        }
    }
}

enter image description here

0 голосов
/ 27 ноября 2009

Нужна дополнительная информация, если это WindowsForms, WPF, ASP.NET и т. Д., Но

Если это WPF, я написал пост, в котором объясняется мой подход к решению этой проблемы: Группировка и флажки в WPF

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