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

时间:2010-01-07 10:51:44

标签: winforms checkbox focus

我在Winforms上有多个复选框,没有所有复选框的Text属性, 所以问题是,当我将鼠标悬停在复选框上时会突出显示但是当我使用tab键进入复选框时,它永远不会突出显示..

如果有人有类似的问题已经解决了,请帮助..

4 个答案:

答案 0 :(得分:7)

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

1)对于所有“空白”文本框,将text属性设置为空格。当您选择控件时,这将创建一个小的突出显示部分。

2)编程复选框的OnEnter和OnLeave事件,并在整个控件周围绘制/绘制一个方块。

3)如果您希望默认的MouseEnter行为在复选框本身上创建黄色突出显示,请按如下所示创建您自己的复选框控件:

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);
    }
}

答案 1 :(得分:3)

我为CheckBox.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);
    }
}

我还将CheckBox.Padding调整为2, 2, 0, 1,以获得距离CheckBox边缘1个像素的边框。

答案 2 :(得分:0)

您可以通过设置AutoSize属性= False来解决此问题。当AutoSize为True时,它的作用类似于AutoSize设置为true的Label,因为空标签在屏幕上几乎不占用任何空间。使用AutoSize = False,您可以手动设置复选框的边界矩形。

答案 3 :(得分:0)

如果只绘制边框,请尝试设置这些属性。

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