这是我之前的问题“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
事件来创建带状物不会产生所需的高亮矩形。
解决方案?此时我正在考虑:
重新思考问题,不知何故,可能有一个丑陋的解决方案,如两个单独的文字行:“调整加载后找到的价格”(CheckBox
),“调整金额:”(NumericUpDown
和ComboBox
)。这真的很糟糕,因为我的选项框绝对是这种类型的选项(即示例中的类型),因此它的垂直尺寸至少会加倍。
某种自定义控件? SplittableCheckBox
某种具有TableLayout
控件的魔法? (很确定这在“每个人似乎错过的部分都失败了。”
放弃并返回MS Sans Serif,或统一使用Tahoma,或将Segoe UI与我的应用程序打包在一起,从而不尊重系统默认字体。
(新的,通过编辑)切换到WPF,如果有人可以说服我完全支持这种情况。
答案 0 :(得分:0)
如果您有多个选项遵循此布局,为什么不创建用户控件?用户控件将包含CheckBox,NumericUpDown,ComboBox和“加载后”标签。您可以覆盖OnFontChanged,以根据使用给定字体呈现文本来调整控件的位置。将一个EventHandler添加到Label以检查/取消选中CheckBox。
对于使焦点矩形环绕所有控件,您应该能够在单击其中一个内部控件时为用户提供控件焦点。