C# Checkbox 没有获得对 Tabstop 的关注

C# Checkbox not gaining focus on Tabstop

我正在制作一个配置编辑器表单并遇到了一些问题,我花了很多时间在用户友好和高效的设计上,因此希望 TabIndex 能够完美地工作以尽量减少鼠标的使用。

我现在的问题是,当我尝试切换控件时,我注意到 CheckBox 没有获得焦点,就像您用鼠标按下它一样,这意味着我无法切换和更改它们的状态直接从键盘。

如何通过 TabIndexTabStop 使 CheckBox 获得焦点,以便我只需按 Enter 键即可通过 KeyUp 事件更改其状态。

下面是我的表格图片,旁边是 TabIndex 的图片以及直接取自 Form.Designer.cs class 的代码。

        // 
        // 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;

请注意,我很难解释这个原因,因为它有点复杂,而且我不知道如何解释它,所以如果我有一些错误,请与我联系。

在评论我的问题的人们的帮助下,我能够正确地确定要做什么和要搜索什么。
感谢 Grant Winney、LarsTech 和 JohnnyBoy 向我解释了 CheckBox 的工作原理以及我需要查看的内容。

我发现 CheckBox 没有 public 突出显示功能,所以我必须发挥创意。
我所做的是我创建了一个自定义 CheckBox 并且好吧..可能只是向您展示代码 :P

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 事件,这将使其变为高亮状态。