【问题标题】:How to increase the size of checkbox in WinForms?如何增加 WinForms 中复选框的大小?
【发布时间】:2010-07-02 13:47:40
【问题描述】:

如何增加 .Net WinForm 中复选框的大小。我尝试了高度和宽度,但它不会增加盒子的大小。

【问题讨论】:

  • 使用 bunifu 复选框
  • 如果您有闲钱,请仅使用使用 bunifu 复选框...可能不值得
  • 通过设计器执行此操作。首先,将 auto size 属性更改为 false。然后您可以在设计器中随意更改大小。

标签: .net winforms


【解决方案1】:

复选框的大小在 Windows 窗体中是硬编码的,你不能乱用它。一种可能的解决方法是在现有复选框之上绘制一个复选框。这不是一个很好的解决方案,因为自动调整大小不能再按原样工作并且文本对齐很混乱,但它是有用的。

向您的项目添加一个新类并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖放到表单上。调整控件的大小以获得所需的框大小,并确保其宽度足以容纳文本。

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

【讨论】:

  • 唯一的问题是在Windows 7中复选框的样式与系统默认的不匹配
  • 调用base.OnPaint(e);也会在屏幕上留下一些像素,我宁愿调用e.Graphics.Clear(this.BackColor);
  • 非常好的解决方案,除了当我把字体变大时,在每 2 个字体点,复选框的右侧与右侧的文本有一点重叠。
  • var rc = new Rectangle(new Point(0, this.Height / 2 - h / 2), new Size(h, h)); 这允许复选框垂直居中并保持其后面的复选框也被覆盖。此外,根据您的使用情况,您可能希望将高度限制在 20 像素左右,之后看起来有点荒谬。
  • @Jader Using Clear 也会删除文本,因此您还需要自定义绘制。
【解决方案2】:

Properties 窗口中有一个AutoSize 选项;如果您将其更改为False 将其关闭,您将能够修改CheckBox 的大小。

【讨论】:

  • 我将 AutoSize 设置为 false,但无法更改大小。
  • 你不会有一个更大的复选框,你只会有一个更大的边框,所以它会变得更容易点击
  • 这只会改变附在复选框上的标签的大小,而不是方框和刻度线的实际大小。
【解决方案3】:

C#版本,来自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);
        }
    }

【讨论】:

  • 我有这个工作,但有没有办法设置平面样式?
【解决方案4】:

支持平面

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

public class TodoCheckBox : CheckBox
{
    public override bool AutoSize
    {
        get => base.AutoSize;
        set => base.AutoSize = false;
    }

    public TodoCheckBox()
    {
        this.TextAlign = ContentAlignment.MiddleRight;
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        int h = this.ClientSize.Height - 2;
        var rc = new Rectangle(new Point(-1, this.Height / 2 - h / 2), new Size(h, h));
        if (this.FlatStyle == FlatStyle.Flat)
        {
            ControlPaint.DrawCheckBox(e.Graphics, rc, this.Checked ? ButtonState.Flat | ButtonState.Checked : ButtonState.Flat | ButtonState.Normal);
        }
        else
        {
            ControlPaint.DrawCheckBox(e.Graphics, rc, this.Checked ? ButtonState.Checked : ButtonState.Normal);
        }
    }
}

【讨论】:

    【解决方案5】:

    如果有人需要 VB.NET 代码,我将这段代码改编为它。我没有在课堂上与AutoSize 开玩笑。构建项目后,应将控件添加到工具箱中。您可以像设置任何其他控件一样将AutoSize 设置为False

    如果这很重要,我只需将类代码放在我使用它的表单的 End Class 下方。

    为了澄清AutoSize 的作用,这个新控件的优点是复选框的“框”部分可以做得更大。在普通复选框中,您无法更改框部分。

    我看到的这个新控件的唯一缺点是,当您调整它的大小时,如果左对齐,框部分会超出文本;使用 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
    

    【讨论】:

      【解决方案6】:

      一个简单的解决方法是使用 CheckBox 的外观属性。使用以下代码使复选框看起来像一个按钮。它将用作复选框。现在可以随文本大小轻松更改大小。

      checkBox1.Appearance = Appearance.Button;
      checkBox1.Font = new Font("Microsoft Sans Serif", 16);
      checkBox1.AutoSize = false;
      checkBox1.Size = new Size(100, 100);
      

      【讨论】:

        【解决方案7】:

        使用不同的控件(例如标签或按钮),只需对 onclick 事件进行编程,即可以可接受的方式更改其外观。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-04
          • 2011-01-03
          • 1970-01-01
          • 2016-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多