如何强制在复选框周围绘制焦点轮廓而不是复选框控件上的文本?

时间:2009-05-28 16:10:01

标签: .net winforms

通常,当通过表格中的控件进行制表时,当焦点设置为CheckBox控件时,文本会被勾勒出来以显示焦点。

我正在使用没有文本的CheckBox(因此只显示该框)。如何强制在框周围绘制焦点轮廓而不是文本?

2 个答案:

答案 0 :(得分:4)

看看 - 只是为了给你一个想法:

public class MyCheckBox : CheckBox
{
  public MyCheckBox()
  {
    // AutoSize is virtual - so you should not call it here, just demo
    AutoSize = false;
    // You need padding to make the base.OnPaint() method leaving you some space
    Padding = new Padding( 2, 2, 0, 0 );
    Size = new Size( 17, 16 );
  }

  protected override void OnPaint( PaintEventArgs pevent )
  {
    base.OnPaint( pevent );
    if( !Focused )
    {
      return;
    }
    using( var pen = new Pen( Color.Black ) )
    {
      pen.DashStyle = DashStyle.Dot;
      pevent.Graphics.DrawRectangle( pen, new Rectangle( 0, 0, 16, 15 ) );
    }
  }
}

答案 1 :(得分:1)

我认为您必须派生自己的“无文本复选框”才能正确识别控件的边界。

我觉得可能听起来很复杂,但不应该太困难。我在学习.NET 1.x时创建了一些精美的复选框,但我不记得关注焦点矩形了。