这是我之前问题的后续“依赖于字体的控制定位。“这是试图解决这个问题 真实的 这个问题背后的问题,也许与我所问的问题不同。

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

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

更一般地说,我希望控件以独立于字体的方式动态布局,以便 <X> NumericUpDown 紧贴“by”和“the”之间的空间 <是> ComboBox, ,并且类似地 <X> ComboBox 适合于 <X> CheckBox 及其右侧的字符串“加载后”。

每个人似乎都会错过的部分: 这一切都嵌套在一个 CheckBox. 。因此,理想情况下,单击“加载后”单词应检查/取消选中复选框,并在“加载后调整价格”围绕“调整价格”。所以只拍打额外的 Label 最后不起作用,因为这样它就不会切换 CheckBox;同样,尝试通过连接这样的东西来创可贴 LabelClick 事件不会产生所需的突出显示矩形。

解决方案? 此时我在想:

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

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

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

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

  5. (新,通过编辑)切换到 WPF,如果有人能让我相信它完全支持这种情况。

有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top