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
public class AutoSizeCheckBox : CheckBox
{
public AutoSizeCheckBox()
{
Anchor = AnchorStyles.None;
// uncomment for flat style
// FlatStyle = FlatStyle.Flat;
}
public override bool AutoSize { get => false; set => base.AutoSize = false; }
protected override void OnPaint(PaintEventArgs e)
{
OnPaintBackground(e); // we don't use base, so we must redraw focus ourselves
var h = ClientSize.Height;
var w = ClientSize.Width;
var state = Checked ? ButtonState.Checked : ButtonState.Normal;
if (FlatStyle == FlatStyle.Flat)
{
state |= ButtonState.Flat;
}
const int focusSize = 1;
h -= focusSize * 2;
var rc = new Rectangle(new Point((w - h) / 2, 0), new Size(h, h));
if (Focused)
{
ControlPaint.DrawFocusRectangle(e.Graphics, rc);
}
if (FlatStyle != FlatStyle.Flat)
{
rc.Inflate(-focusSize, -focusSize);
}
ControlPaint.DrawCheckBox(e.Graphics, rc, state);
}
}
8条答案
按热度按时间dvtswwa31#
复选框的大小在Windows窗体中是硬编码的,您不能随意改变它。一个可能的解决方法是在现有复选框的顶部绘制一个复选框。这不是一个很好的解决方案,因为自动调整大小不再按原样工作,文本对齐方式也很混乱,但它是可用的。
将新类添加到项目中并粘贴下面所示的代码。编译。将新控件从工具箱顶部拖放到窗体上。调整控件的大小,以获得所需的框大小,并确保其宽度足以容纳文本。
ars1skjm2#
在
Properties
窗口中有一个AutoSize
选项;如果您通过将其更改为False
来关闭它,您将能够修改CheckBox
大小。brtdzjyr3#
C#版本,来自a forum.codecall.net topic:
8ulbf1ek4#
一个简单的解决方法是使用CheckBox的外观属性。使用下面的代码使复选框看起来像一个按钮。它将作为一个复选框。现在,大小可以很容易地随文本大小沿着更改。
zz2j4svz5#
它支持Flat
cclgggtu6#
如果有人需要VB.NET代码,我会修改这段代码。我没有在类中使用
AutoSize
。项目构建后,控件应该添加到工具箱中。您可以在那里将AutoSize
设置为False
,就像设置其他控件一样。如果有必要的话,我只是将类代码放在使用它的窗体的
End Class
下面。为了说明
AutoSize
的作用,这个新控件的优点是可以将复选框的“框”部分做得更大。在普通的复选框中,不能更改框部分。我看到的这个新控件的唯一缺点是,当您调整它的大小时,如果左对齐,则框部分会溢出文本;请使用
TextAlign
属性修复此问题。wn9m85ua7#
使用一个不同的控件(例如标签或按钮),只需编写onclick事件,以可接受的方式更改其外观。
hjzp0vay8#
以下是我在Hi-Dpi场景(包括每个监视器)中使用的版本,其中
TableLayoutPanels
和所有内容都配置为“自动调整大小”模式(使用.NET Framework 4.8测试):