Подтвердить что ты не робот

Как увеличить размер флажка в WinForms?

Как увеличить размер флажка в .Net WinForm. Я попробовал Height и Width, но не увеличил размер коробки.

4b9b3361

Ответ 1

Размер флажка жестко закодирован внутри Windows Forms, вы не можете с ним справиться. Один из возможных способов обхода - это установить флажок поверх существующего. Это не отличное решение, поскольку автоматическая калибровка больше не может работать как есть, а выравнивание текста запутано, но оно исправное.

Добавьте новый класс в свой проект и вставьте код, показанный ниже. Компиляция. Отбросьте новый элемент управления сверху панели инструментов на свою форму. Отрегулируйте размер элемента управления, чтобы получить нужный размер окна и убедитесь, что он достаточно широкий, чтобы соответствовать тексту.

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

Ответ 2

Параметр AutoSize в Properties; если вы отключите его, изменив его на False, вы сможете изменить размер своего CheckBox.

Ответ 3

версия С#, от форум .codecall.net тема:

 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

Если кому-то нужен код VB.NET, я адаптировал этот код к нему. Я не обманывал AutoSize в классе. Элемент управления должен быть добавлен в панель инструментов после создания проекта. Вы можете установить AutoSize на False там же, что и любой другой элемент управления.

Если это имеет значение, я просто помещаю код класса ниже End Class формы, в которой я его использовал.

Чтобы прояснить, что делает AutoSize, преимущество этого нового элемента управления состоит в том, что часть поля "box" может быть увеличена. В нормальном флажке вы не можете изменить область ящика.

Единственный недостаток этого нового элемента управления, который я вижу, заключается в том, что при его изменении размер поля коробки перекрывает текст, если он выровнен слева; исправить это с помощью свойства 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

Чтобы изменить размер флажка, вы должны установить для свойства resize значение false. Я пробовал:

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

и:

    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

Не работает,

также я попытался переопределить плоский стиль, но его нельзя переопределить... любые идеи?