Как увеличить размер флажка в WinForms? - PullRequest
32 голосов
/ 02 июля 2010

Как увеличить размер флажка в .Net WinForm.Я пробовал Высота и Ширина, но это не увеличивает размер Box.

Ответы [ 6 ]

36 голосов
/ 02 июля 2010

Размер флажка жестко запрограммирован в 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);
    }
}
17 голосов
/ 26 октября 2012

В окнах Properties есть опция AutoSize; если вы отключите его, изменив значение на False, вы сможете изменить размер вашего CheckBox.

6 голосов
/ 18 ноября 2014

C # версия, из раздела forum.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);
        }
    }
1 голос
/ 04 декабря 2013

Если кому-то нужен код 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
0 голосов
/ 04 августа 2018

Простой обходной путь - использовать свойство внешнего вида CheckBox. Используйте следующий код, чтобы выглядеть как кнопка. Он будет функционировать как флажок. Теперь размер можно легко изменить вместе с размером текста.

checkBox1.Appearance = Appearance.Button;
checkBox1.Font = new Font("Microsoft Sans Serif", 16);
checkBox1.AutoSize = false;
checkBox1.Size = new Size(100, 100);
0 голосов
/ 18 января 2018

Используйте другой элемент управления (например, метку или кнопку) и просто запрограммируйте событие onclick, чтобы изменить его внешний вид приемлемым способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...