С# Флажок не фокусируется на Tabstop

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

Теперь моя проблема заключается в том, что когда я пытаюсь перемещаться по элементам управления, я заметил, что CheckBox не получает фокуса, например, если вы нажимаете его мышью, это означает, что я не могу перемещаться по элементам управления и изменять их состояние непосредственно с клавиатуры.

Как сделать так, чтобы CheckBox получал фокус через TabIndex и TabStop, чтобы я мог просто нажать Enter, чтобы изменить его состояние с помощью события KeyUp.

Ниже изображение моей формы, а рядом с ним изображение TabIndex, а также код, взятый непосредственно из класса Form.Designer.cs.

введите здесь описание изображения

        // 
        // cbxDefaultPublic
        // 
        this.cbxDefaultPublic.AutoSize = true;
        this.cbxDefaultPublic.Location = new System.Drawing.Point(247, 12);
        this.cbxDefaultPublic.Name = "cbxDefaultPublic";
        this.cbxDefaultPublic.Size = new System.Drawing.Size(15, 14);
        this.cbxDefaultPublic.TabIndex = 1;
        this.cbxDefaultPublic.TabStop = true;
        this.cbxDefaultPublic.UseVisualStyleBackColor = true;

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


person Simon Jensen    schedule 19.01.2016    source источник
comment
Элемент управления CheckBox предпочитает иметь текст, чтобы показать фокус.   -  person LarsTech    schedule 20.01.2016
comment
@GrantWinney Хорошо, теперь я действительно запутался, в основном потому, что SpaceBar работает, но меня смущает то, что визуальные эффекты для CheckBox не меняются, когда он находится в фокусе, например, как элементы управления (кнопки fx) становятся слегка синими, когда они получают фокус .   -  person Simon Jensen    schedule 20.01.2016
comment
@LarsTech Я проверил это с текстом, кажется, что CheckBox остается серым, а текст на нем будет иметь пунктирный контур.   -  person Simon Jensen    schedule 20.01.2016
comment
Именно так был разработан CheckBox.   -  person LarsTech    schedule 20.01.2016
comment
@GrantWinney Я пытаюсь добиться изменения CheckBox на LightBlue, как если бы вы наводили на него указатель мыши, как когда кнопки находятся в фокусе.   -  person Simon Jensen    schedule 20.01.2016
comment
Если вы не хотите использовать текст с флажком, проверьте событие GotFocus, чтобы изменить внешний вид, когда он сфокусирован, чтобы вы знали, что он сфокусирован.   -  person jsuen    schedule 20.01.2016


Ответы (1)


С помощью людей, комментирующих мой вопрос, я смог найти правильный путь, что делать и что искать.
Спасибо Гранту Уинни, LarsTech и JohnnyBoy за то, что они объяснили мне, как работает CheckBox и что делать. Мне нужно было посмотреть.

Я узнал, что CheckBox не имеет функции публичного выделения, поэтому мне пришлось проявить творческий подход.

public class MyCbx : CheckBox {
    protected override void OnGotFocus(EventArgs e) {
        base.OnGotFocus(e);
        base.OnEnter(e);
        base.OnMouseEnter(e);
    }
    protected override void OnLostFocus(EventArgs e) {
        base.OnLostFocus(e);
        base.OnLeave(e);
        base.OnMouseLeave(e);
    }
    protected override void OnMouseLeave(EventArgs e) {
        if(!this.Focused) {//prevent it from losing highligh if control is in focus
            base.OnMouseLeave(e);
        }
    }
}

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

person Simon Jensen    schedule 20.01.2016