Как увеличить размер флажка в .Net WinForm. Я попробовал Height и Width, но не увеличил размер коробки.
Как увеличить размер флажка в WinForms?
Ответ 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
Не работает,
также я попытался переопределить плоский стиль, но его нельзя переопределить... любые идеи?