Чекбоксы WinForms не реагируют на клавиши плюс / минус - легкий обходной путь?

2

В формах, созданных с pre dotNET VB и С++ (MFC), элемент управления флажком ответил на клавишу плюс/минус без специального программирования. Когда фокус был на элементе управления чекбокса, нажатие + будет проверять флажок, независимо от предыдущего состояния (отмечено или не отмечено), а нажатие - будет отменять его, независимо от предыдущего состояния.

Флажки

С# winform не показывают этого поведения.

Указанное поведение было очень и очень удобно для автоматизации, в результате чего программа автоматизации задавала фокус на элементе управления флажком и выдавала + или - для проверки или снятия отметки. Без этой возможности это невозможно сделать, поскольку программа автоматизации (по крайней мере, тот, который я использую) не может запросить текущее состояние этого флажка (чтобы он мог решить, следует ли выпустить ключ Space для переключения состояния на желаемый).

Я просмотрел свойства флажка в среде Visual Studio 2008 IDE и не смог найти ничего, что могло бы восстановить/включить ответ на +/-.

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

Итак, нижняя строка: кто-нибудь знает способ вернуть это поведение легче, чем изменение кодировки?

  • 0
    Только что попробовал, флажок VB6 не отвечает на PLUS / MINUS, но в приложении C ++ MFC это работает
  • 0
    Ах, прости. Я ушел от комментария, который я услышал от кого-то еще, что это работает в VB. Я знаю, что это работает в MFC, потому что это кодовая база, которую я должен тестировать и поддерживать, и несколько стандартных диалогов Windows также демонстрируют поведение.
Теги:
winforms
keyboard-shortcuts

2 ответа

5
Лучший ответ

Я не вижу простого способа включить это. Однако замена существующего флажка не должна быть ужасно сложной:

1- Создать новую библиотеку классов и создать новый флажок (вывести флажок, переопределить OnKeyPress.)
2- Ссылка новой библиотеки на существующие проекты.
3- Поиск и замена System.Windows.Forms.Checkbox на YourNamespace.NewCheckbox

  • 0
    +1, потому что это единственный способ сделать это или поймать событие нажатия клавиши в каждой форме для каждого флажка. Теперь это будет отстой. :)
  • 0
    Да, это был вывод, который я сделал. Просто мне придется изменить очень большое количество проектов и расстроить довольно много яблочных тележек в процессе. Мне нужно было убедиться, что никто не знал ни о каких волшебных пулях - они иногда существуют - прежде чем прибегать к таким действиям, поэтому я решил сделать снимок и спросить здесь.
Показать ещё 1 комментарий
3

Как ответил Якоб Г, вы можете легко переопределить CheckBox Control следующим образом:

public class MyCheckBoxOverride:CheckBox
    {
        protected override void OnKeyDown(KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Oemplus)
            {
                this.Checked = true;
            }
            else if(e.KeyCode == Keys.OemMinus)
            {
                this.Checked = false;
            }
            base.OnKeyDown(e);
        }


    }
  • 0
    Да, но не так легко изменить десятки проектов, чтобы использовать его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню