В формах, созданных с pre dotNET VB и С++ (MFC), элемент управления флажком ответил на клавишу плюс/минус без специального программирования. Когда фокус был на элементе управления чекбокса, нажатие + будет проверять флажок, независимо от предыдущего состояния (отмечено или не отмечено), а нажатие - будет отменять его, независимо от предыдущего состояния.
ФлажкиС# winform не показывают этого поведения.
Указанное поведение было очень и очень удобно для автоматизации, в результате чего программа автоматизации задавала фокус на элементе управления флажком и выдавала + или - для проверки или снятия отметки. Без этой возможности это невозможно сделать, поскольку программа автоматизации (по крайней мере, тот, который я использую) не может запросить текущее состояние этого флажка (чтобы он мог решить, следует ли выпустить ключ Space для переключения состояния на желаемый).
Я просмотрел свойства флажка в среде Visual Studio 2008 IDE и не смог найти ничего, что могло бы восстановить/включить ответ на +/-.
Поскольку я контролирую исходный код для рассматриваемых WinForms, я мог бы заменить все элементы управления флажками на пользовательский элемент управления флажком, но blech, я бы хотел этого избежать - черт возьми, я не думаю, что мог бы даже считайте, что с учетом объема рефакторинга, который нужно будет сделать.
Итак, нижняя строка: кто-нибудь знает способ вернуть это поведение легче, чем изменение кодировки?
Я не вижу простого способа включить это. Однако замена существующего флажка не должна быть ужасно сложной:
1- Создать новую библиотеку классов и создать новый флажок (вывести флажок, переопределить OnKeyPress.)
2- Ссылка новой библиотеки на существующие проекты.
3- Поиск и замена System.Windows.Forms.Checkbox
на YourNamespace.NewCheckbox
Как ответил Якоб Г, вы можете легко переопределить 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);
}
}