3

这是我之前的问题“依赖字体的控制定位”的后续。它试图解决该问题背后的真正问题,可能以不同于我所询问的方式。

问题陈述示例:我想要一个复选框,上面写着“加载后按<X> <Y>调整价格”,其中<X>是一个数字---可以用 --- 调整,NumericUpDown<Y>是“百分比”或“美元”,选择由ComboBox. 这将在一行上。

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

更一般地说,我希望控件以与字体无关的方式动态布局,以便<X> NumericUpDown紧贴“by”和<Y> ComboBox之间的空间,同样<X> ComboBox适合关于<X> CheckBox和其右侧的字符串“加载后”。

每个人似乎都错过的部分:这都嵌套在CheckBox. 因此,理想情况下,单击“加载后”应该选中/取消选中复选框,并在“加载后调整价格”周围绘制那个小高亮矩形。所以只是在最后打一个额外Label的耳光是行不通的,因为那样它就不会切换CheckBox; Label同样,尝试通过连接这样的'事件来创可贴Click不会产生所需的高亮矩形。

解决方案?在这一点上,我在想:

  1. 以某种方式重新考虑这个问题,也许是一个丑陋的解决方案,比如两行单独的文本:“加载后调整找到的价格”(CheckBox),“调整金额:”(NumericUpDownComboBox)。这真的很糟糕,因为我的选项框绝对充满了这种类型的选项(即示例中的类型),因此它的垂直尺寸至少会增加一倍。

  2. 某种自定义控件?SplittableCheckBox?

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

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

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

4

1 回答 1

0

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

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

于 2008-09-01T21:13:01.993 回答