2010-07-02 9 views

Respuesta

30

El tamaño de la casilla de verificación está codificado dentro de Windows Forms, no se puede meter con él. Una posible solución es dibujar una casilla de verificación encima de la existente. No es una gran solución ya que el auto-tamaño ya no puede funcionar tal como está y la alineación del texto está confusa, pero es útil.

Agregue una nueva clase a su proyecto y pegue el código que se muestra a continuación. Compilar. Coloque el nuevo control desde la parte superior de la caja de herramientas en su formulario. Ajuste el tamaño del control para que obtenga el tamaño de caja deseado y asegúrese de que sea lo suficientemente ancho como para caber en el texto.

using System; 
using System.Drawing; 
using System.Windows.Forms; 

class MyCheckBox : CheckBox { 
    public MyCheckBox() { 
     this.TextAlign = ContentAlignment.MiddleRight; 
    } 
    public override bool AutoSize { 
     get { return base.AutoSize; } 
     set { base.AutoSize = false; } 
    } 
    protected override void OnPaint(PaintEventArgs e) { 
     base.OnPaint(e); 
     int h = this.ClientSize.Height - 2; 
     Rectangle rc = new Rectangle(new Point(0, 1), new Size(h, h)); 
     ControlPaint.DrawCheckBox(e.Graphics, rc, 
      this.Checked ? ButtonState.Checked : ButtonState.Normal); 
    } 
} 
+0

El único problema es que en Windows 7 el estilo de la casilla de verificación no coincide con el predeterminado del sistema –

+3

al llamar 'base.OnPaint (e);' también deja algunos píxeles en la pantalla, prefiero llamar a 'e.Graphics .Clear (this.BackColor); ' –

+0

Muy buena solución, excepto cuando hago la fuente más grande, en cada punto de 2 fuentes, el derecho de la casilla se superpone un poco con el texto de la derecha. – Samuel

-2

Para poder cambiar el tamaño de una casilla de verificación debe establecer la propiedad de cambiar el tamaño a falso. He tratado:

Public Sub New() 
    Me.Text = "Approved" 
    Me.TextAlign = ContentAlignment.MiddleLeft 
    Me.FlatStyle = Windows.Forms.FlatStyle.Flat 
End Sub 

y:

Me.Height = 24 
    Me.Width = 200 
    Dim squareSide As Integer = 20 
    Dim rect As New Rectangle(New Point(0, 1), New Size(squareSide, squareSide)) 
    ControlPaint.DrawCheckBox(
     e.Graphics, rect, If(Me.Checked, ButtonState.Checked, ButtonState.Normal)) 
    Me.FlatStyle = FlatStyle.Flat 

End Sub 

no trabajado,

También probé para anular el estilo plano, pero no es capaz de anular-... alguna idea?

+3

No hay propiedad de "cambio de tamaño" en el control CheckBox Windows Forms. – AnAurelian

12

Hay una opción AutoSize en las ventanas Properties; Si lo desactiva cambiándolo a False, podrá modificar el tamaño de su CheckBox.

+2

Configuré AutoSize en falso y no puedo cambiar el tamaño. – bebosh

+0

No tendrá una casilla de verificación más grande, solo tendrá el borde más grande para que sea más fácil hacer clic en – 0014

1

Si alguien necesita el código VB.NET, he adaptado este código. No engañé con AutoSize en la clase. El control debería agregarse a la caja de herramientas una vez que se haya construido el proyecto. Puede establecer AutoSize a False allí de la misma manera que lo haría con cualquier otro control.

si importa, acabo de poner el código de clase por debajo de la End Class de la forma lo estaba utilizando en.

para aclarar lo AutoSize hace, la ventaja de este nuevo control es que la parte de "caja" de la casilla de verificación puede hacerse más grande. En la casilla de verificación normal, no puede cambiar la parte del cuadro.

La única desventaja de este nuevo control que veo es que cuando se cambia el tamaño de la parte de la caja se sobrepasa el texto si se alinea a la izquierda; soluciona esto con la propiedad TextAlign.

Public Class NewCheckBox 
    Inherits CheckBox 

    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) 
     MyBase.OnPaint(e) 

     'Make the box you check 3/4 the height 
     Dim boxsize As Integer = Me.Height * 0.75 
     Dim rect As New Rectangle(
      New Point(0, Me.Height/2 - boxsize/2), 
      New Size(boxsize, boxsize) 
     ) 

     ControlPaint.DrawCheckBox(e.Graphics, rect, If(Me.Checked, ButtonState.Checked, ButtonState.Normal)) 
    End Sub 
End Class 
5

C# versión, desde a forum.codecall.net topic:

class BigCheckBox : CheckBox 
    { 
     public BigCheckBox() 
     { 
      this.Text = "Approved"; 
      this.TextAlign = ContentAlignment.MiddleRight;    
     } 

     public override bool AutoSize 
     { 
      set { base.AutoSize = false; } 
      get { return base.AutoSize; } 
     } 

     protected override void OnPaint(PaintEventArgs e) 
     { 
      base.OnPaint(e); 

      this.Height = 100; 
      this.Width = 200; 
      int squareSide = 80; 

      Rectangle rect = new Rectangle(new Point(0, 1), new Size(squareSide, squareSide)); 

      ControlPaint.DrawCheckBox(e.Graphics, rect, this.Checked ? ButtonState.Checked : ButtonState.Normal); 
     } 
    } 
+0

Tengo esto funcionando, pero ¿hay alguna manera de establecer el estilo plano? – Ross

0

utilizar un control diferente (por ejemplo, etiqueta o botón) y acaba de programar el evento onclick para cambiar su apariencia de una manera aceptable.

Cuestiones relacionadas