将控件放在CheckBox的中间

时间:2008-09-01 21:00:06

标签: winforms layout fonts

这是我之前的问题“Font-dependent control positioning.”的后续内容。这是尝试解决该问题背后的真正的问题,可能与我提出的问题有所不同。< / p>

问题陈述的示例:我想要一个复选框,说明“按调整价格&lt; X&gt; &lt; Y&gt; ,“其中&lt; X&gt; 是一个数字---可调整为NumericUpDown ---而&lt; Y&gt; 是”百分比“或”美元,“由ComboBox做出选择。这将是一行。

复杂化:我希望能够为所有这些控件更改我的字体(基本上将它们设置为System.Drawing.Fonts.MessageBoxFont,这是Windows XP /等上的Tahoma 8 pt和Segoe Vista上的用户界面9 pt),没有弄乱我的布局,这与我当前的Position - 属性 - 设置范例不起作用。

更一般地说,我希望控件能够以与字体无关的方式动态布局,以便&lt; X&gt; NumericUpDown紧密地适应“通过“和&lt; Y&gt; ComboBox,类似地&lt; X&gt; ComboBox适合&lt; ; X&gt; CheckBox以及右侧加载后的字符串。

每个人似乎都错过了这个部分:这一切都嵌套在CheckBox中。因此,理想情况下,单击“加载后”字样应选中/取消选中复选框,并在“加载后调整价格”周围绘制一个高亮矩形。所以只是在末尾打一个额外的Label不起作用,因为它不会切换CheckBox;同样地,尝试通过挂钩这样的Label Click事件来创建带状物不会产生所需的高亮矩形。

解决方案?此时我正在考虑:

  1. 重新思考问题,不知何故,可能有一个丑陋的解决方案,如两个单独的文字行:“调整加载后找到的价格”(CheckBox),“调整金额:”(NumericUpDownComboBox)。这真的很糟糕,因为我的选项框绝对是这种类型的选项(即示例中的类型),因此它的垂直尺寸至少会加倍。

  2. 某种自定义控件? SplittableCheckBox

  3. 某种具有TableLayout控件的魔法? (很确定这在“每个人似乎错过的部分都失败了。”

  4. 放弃并返回MS Sans Serif,或统一使用Tahoma,或将Segoe UI与我的应用程序打包在一起,从而不尊重系统默认字体。

  5. (新的,通过编辑)切换到WPF,如果有人可以说服我完全支持这种情况。

1 个答案:

答案 0 :(得分:0)

如果您有多个选项遵循此布局,为什么不创建用户控件?用户控件将包含CheckBox,NumericUpDown,ComboBox和“加载后”标签。您可以覆盖OnFontChanged,以根据使用给定字体呈现文本来调整控件的位置。将一个EventHandler添加到Label以检查/取消选中CheckBox。

对于使焦点矩形环绕所有控件,您应该能够在单击其中一个内部控件时为用户提供控件焦点。