C# Checkbox 没有获得对 Tabstop 的关注
C# Checkbox not gaining focus on Tabstop
我正在制作一个配置编辑器表单并遇到了一些问题,我花了很多时间在用户友好和高效的设计上,因此希望 TabIndex
能够完美地工作以尽量减少鼠标的使用。
我现在的问题是,当我尝试切换控件时,我注意到 CheckBox
没有获得焦点,就像您用鼠标按下它一样,这意味着我无法切换和更改它们的状态直接从键盘。
如何通过 TabIndex
和 TabStop
使 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 事件,这将使其变为高亮状态。
我正在制作一个配置编辑器表单并遇到了一些问题,我花了很多时间在用户友好和高效的设计上,因此希望 TabIndex
能够完美地工作以尽量减少鼠标的使用。
我现在的问题是,当我尝试切换控件时,我注意到 CheckBox
没有获得焦点,就像您用鼠标按下它一样,这意味着我无法切换和更改它们的状态直接从键盘。
如何通过 TabIndex
和 TabStop
使 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 事件,这将使其变为高亮状态。