如果复选框上未应用文本,Winforms复选框焦点问题

如果复选框上未应用文本,Winforms复选框焦点问题,winforms,checkbox,focus,Winforms,Checkbox,Focus,我在Winforms上有多个复选框,但没有所有复选框的文本属性, 所以问题是,当我将鼠标悬停在复选框上时,它会高亮显示,但当我使用tab键转到复选框时,它永远不会高亮显示 如果有人有类似的问题,并且已经解决了,请提供帮助。问题是,当复选框获得焦点时,它只会突出显示控件的文本部分,在您的情况下,该部分为空。您有几个选择: 1) 对于所有“空白”文本框,请将“文本”属性设置为空格。当您在控件上单击tab键时,这将创建一个小的高亮显示部分 2) 编程复选框的OnEnter和OnLeave事件,并围绕整

我在Winforms上有多个复选框,但没有所有复选框的文本属性, 所以问题是,当我将鼠标悬停在复选框上时,它会高亮显示,但当我使用tab键转到复选框时,它永远不会高亮显示


如果有人有类似的问题,并且已经解决了,请提供帮助。

问题是,当复选框获得焦点时,它只会突出显示控件的文本部分,在您的情况下,该部分为空。您有几个选择:

1) 对于所有“空白”文本框,请将“文本”属性设置为空格。当您在控件上单击tab键时,这将创建一个小的高亮显示部分

2) 编程复选框的OnEnter和OnLeave事件,并围绕整个控件绘制/绘制一个正方形

3) 如果希望默认的鼠标指针行为在复选框本身上创建淡黄色高亮显示,请按如下方式创建自己的复选框控件:

public class MyCB : CheckBox
{
    protected override void OnEnter(EventArgs e)
    {
      base.OnEnter(e);
      base.OnMouseEnter(e);
    }

    protected override void OnLeave(EventArgs e)
    {
      base.OnLeave(e);
      base.OnMouseLeave(e);
    }
}

可以通过将AutoSize属性设置为False来解决此问题。当AutoSize为True时,它的行为类似于AutoSize设置为True的标签,因为空标签几乎不会占用屏幕上的任何空间。如果AutoSize=False,您可以手动设置复选框的边框。

我为
复选框添加了一个事件处理程序。Paint
事件并添加了以下内容:

private void checkBox1_Paint(object sender, PaintEventArgs e)
{
    CheckBox checkBox = sender as CheckBox;

    if (checkBox.Focused)
    {
        // e.ClipRectangle is affected by checkBox.Padding. Be careful when changing the Padding.
        ControlPaint.DrawFocusRectangle(e.Graphics, e.ClipRectangle, checkBox.ForeColor, checkBox.BackColor);
    }
}

我还调整了
复选框。填充
2,2,0,1
,以获得距离
复选框边缘1像素的边框
如果仅绘制边框,请尝试设置这些属性

AutoSize : False
CheckAlign : MiddleCenter
Font: Courier New, 12.25pt
TextAlign: MiddleRight
Padding : 0, 5, 0, 0
Size : 26, 26
Text : "  " (two spaces)

将AutoSize属性设置为false仍然不会更改文本为空的事实,默认情况下,当您在复选框中添加选项卡时,它只高亮显示文本块,而不是整个控件本身。您可以将控件设置为所需大小,自动调整大小应用于复选框,而不是复选框内的文本框。