Порядок табуляции в C # с переключателями

Итак, у меня есть приложение для Windows-формы, есть текстовое поле, которое сообщает вам, какой продукт вы хотите выбрать. Вы можете выбрать один из трех переключателей, а также кнопку, которая отправляет этот ответ. Я хочу иметь возможность перемещаться по этим переключателям с помощью вкладки. Я пробовал использовать порядок табуляции, но он не работает. Какие-либо предложения?


person Israel Rodriguez    schedule 06.10.2012    source источник
comment
Почему бы вам вместо этого не использовать раскрывающийся список? Звучит более уместно.   -  person SimpleVar    schedule 06.10.2012
comment
Вы можете перехватить клавишу табуляции в событии KeyPress и обработать его самостоятельно. Или унаследовать от класса радио-кнопки и расширить его, чтобы обрабатывать нажатия клавиш табуляции.   -  person lc.    schedule 06.10.2012
comment
Это поведение переключателя по умолчанию. Если вы хотите изменить его, вам может потребоваться создать подкласс и заново реализовать поведение клавиатуры. Или - может быть, вы можете создать свой собственный переключатель.   -  person Murtuza Kabul    schedule 06.10.2012


Ответы (1)


Windws Forms позволяет вам входить в группу только табуляцией. Один из способов обойти это - объединить все кнопки в отдельные группы, поместив групповые рамки вокруг каждой из них.

Хотя это позволяет вам перемещаться по ним табуляцией, теперь они не связаны и не отменяются автоматически. Для этого зарегистрируйтесь для события, которое запускается при выборе, и программно отмените выбор других.

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        private List<RadioButton> allMyButtons;

        public Form1()
        {
            InitializeComponent();
            allMyButtons = new List<RadioButton>
            {
                radioButton1,
                radioButton2
            };
        }

        private void radioButton_CheckedChanged(object sender, EventArgs e)
        {
            RadioButton sendingRadio = (sender as RadioButton);
            if(sendingRadio == null) return;
            if(sendingRadio.Checked == true){
                foreach(var rb in (from b in allMyButtons where b != sendingRadio select b))
                {
                    rb.Checked = false;
                }
            }
        }

    }
}

Я протестировал этот подход, и, похоже, он работает.

Формы - это не современный способ ведения дел. Рассмотрите возможность перехода на WPF для новых проектов.

person Johannes    schedule 06.10.2012