Winforms 在复选框中间定位控件

Winforms 在复选框中间定位控件,winforms,layout,fonts,Winforms,Layout,Fonts,这是我上一个问题的后续问题“这是试图解决这个问题背后的真正问题,可能与我所问的方式不同 问题陈述示例:我想要一个复选框,上面写着“加载后按调整价格”,其中是一个数字,可以用数值上下调整,也可以是“百分比”或“美元”,由组合框进行选择。这将在一条线上 复杂性:我希望能够更改所有这些控件的字体(基本上是将它们设置为System.Drawing.fonts.MessageBoxFont,在Windows XP/etc上是Tahoma 8 pt,在Vista上是Segoe UI 9 pt),而不会弄乱我

这是我上一个问题的后续问题“这是试图解决这个问题背后的真正问题,可能与我所问的方式不同

问题陈述示例:我想要一个复选框,上面写着“加载后按调整价格”,其中是一个数字,可以用
数值上下调整,也可以是“百分比”或“美元”,由
组合框进行选择。这将在一条线上

复杂性:我希望能够更改所有这些控件的字体(基本上是将它们设置为
System.Drawing.fonts.MessageBoxFont
,在Windows XP/etc上是Tahoma 8 pt,在Vista上是Segoe UI 9 pt),而不会弄乱我的布局,用我当前的
位置
-property——设置范例不起作用

更一般地说,我希望控件以独立于字体的方式进行动态布局,以便
NumericUpDown
紧密地插入“by”和
ComboBox
之间的空间,同样地,
ComboBox
也与
复选框和其右侧的“加载后”字符串相匹配

每个人似乎都忽略的部分:这都嵌套在
复选框中。因此,理想情况下,点击单词“加载后”应该选中/取消选中复选框,并在“加载后调整价格”周围画一个小的高亮矩形。因此,只在末尾打一个额外的
标签是不起作用的,因为这样就不会切换
复选框;类似地,试图通过挂起这样的<代码>标签 <代码>点击< /代码>事件不会产生期望的高亮矩形。

解决方案?此时,我想:

  • 以某种方式重新思考这个问题,也许可以使用一个丑陋的解决方案,比如两行单独的文本:“加载后调整找到的价格”(
    CheckBox
    ),“调整金额”(
    NumericUpDown
    ComboBox
    )。这真的很糟糕,因为我的选项框中完全充满了这种类型的选项(即示例中的类型),所以它的垂直大小至少会增加一倍

  • 某种自定义控件<代码>拆分表复选框
  • 使用
    TableLayout
    控件的某种魔法?(很肯定这在“每个人似乎都错过的部分”中失败了。)

  • 放弃,或者返回MS Sans Serif,或者统一使用Tahoma,或者将Segoe UI打包到我的应用程序中,从而不尊重系统默认字体

  • (新增,通过编辑)切换到WPF,如果有人能说服我它完全支持此场景


  • 如果有几个选项遵循此布局,为什么不创建用户控件?用户控件将包含复选框、数字上下、组合框和“加载后”的标签“。您可以重写OnFontChanged,以根据使用给定字体呈现的文本调整控件的位置。将EventHandler添加到标签以选中/取消选中复选框

    至于让焦点矩形包围所有控件,您应该能够在单击其中一个内部控件时为用户控件提供焦点