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

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

Флажки C # winform, по-видимому, не демонстрируют такое поведение.

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 04 мая 2010

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

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

3 голосов
/ 04 мая 2010

Как ответил Jacob G, вы можете легко переопределить 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);
        }


    }
...