winforms - 绘制CheckBox时如何确定合适的尺寸?

标签 winforms checkbox size

我正在帮助某人转换一堆乱七八糟的面板和700个精心放置的复选框,并使之更加理智。我的计划是实现一个自定义控件,该控件使用ControlPaint类手动绘制复选框。这样可以更轻松地处理数据,并且从表单中删除700个GDI句柄可能是一件好事*。

ControlPaint.DrawCheckbox()接受Graphics,复选框的边界和ButtonState。界限似乎很有趣;我认为该行为可能是:

  • 如果我提供了太多空间,则会在这些边界的中心绘制一个复选框。
  • 我得到一个与我指定的范围一样大的复选框。

  • 因此,我使用100x100矩形进行了边界测试,发现结果是100x100复选框。有趣!但是,我只想要一个普通的旧复选框,该复选框显示系统默认的复选框大小。我希望这将是对诸如GetSystemMetrics()之类的一些API函数的调用,但是我不确定是否有什么方法是正确的方法。 (也许是SM_CXMENUCHECK?这似乎只是偶然的关系。)

    CheckBoxRenderer以正确的大小呈现。我将使用它,但是我不喜欢不知道该怎么做。因此,我与Reflector一起闲逛,看看它在做什么。如果您使用某种视觉样式进行渲染,它将调用GetThemePartSize(),这是一个相当复杂的API调用,但至少可以回答我如何获得视觉主题的尺寸。有趣的是,如果不使用视觉样式,则似乎会返回硬编码的尺寸:13x13。系统的复选框大小是否确实硬编码为13像素见方,还是MS的一个懒惰监督?

    这个问题的重点不是要告诉我仅使用CheckBoxRenderer。我已经在做我很好奇如何找到自己的尺寸,在编写使用Reflector的过程中,现在我很好奇尺寸实际上是否无法更改。

    *我知道,即使您找到一种使用负内存的方法,在屏幕上放置700个东西也不是一个好主意。该项目的第2步建议进行更合理的设计。 DataGridView已经被认为是不合适的东西。我试图一次使事情迈出一步,而且我也真的很好奇是否有一种方法可以确定系统的复选框大小。

    最佳答案

    有一种简单的方法来获取大小。

    1,您将一个实际的CheckBox实例添加到您的窗体。
    2,将其放置在无法看到的位置。位置=(-1000,-1000)
    3,将复选框文本设置为要测量的内容。
    4,使用checkBox1.GetPreferredSize(Size.Empty)

    然后,这将给出首选大小,即使用您给定的当前文本设置绘制该控件所需的实际大小。

    关于winforms - 绘制CheckBox时如何确定合适的尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3721664/

    相关文章:

    c# - 如何正确使用 "this"访问表单控件?

    .net - PowerShell .NET 模仿 Windows 树节点的默认复选框行为

    ios - iPhone 应用程序已在 iPad 上延伸

    linux - 增加 ubuntu 磁盘大小的问题(virtualbox 镜像)

    testing - 如何测试容器的宽度/高度大小

    c# - 在 Winforms 中使用控件(链接标签、 TreeView )

    c# - 使用 SELECT 查询时抛出异常 : 'System.Collections.Generic.KeyNotFoundException' in mscorlib. dll

    java - SQL 中的 CheckBoxMultipleChoice 存储

    c# - 选中/取消选中 TableLayout 中的多个复选框

    JavaScript 表单验证。单选按钮和复选框。如何验证?