我想在 Vista 上使用 Segoe UI 9 pt,在 Windows XP 等上使用 Tahoma 8 pt。(实际上,我会在两者上使用 Segoe UI,但我的用户可能没有安装它。)但是,这些完全不同,它们确实搞乱了我的表单布局。所以...有没有好的办法来处理这个问题?

一个例子:我有一个 Label, ,中间有一些空白,我在其中放置了一个 NumericUpDown 控制。如果我使用 Segoe UI, NumericUpDown 与我使用 Tahoma 时相比,空白区域左侧大约有 5 个像素左右。这是一种痛苦;我不知道在这里做什么。

最具体地说,我的问题是:如何将控件放置在空白区域的中间 Labels(或 CheckBoxes等)?最一般的是:有没有好的方法来处理 Windows 窗体中的不同字体?

编辑: :我认为人们没有理解这个问题。我知道怎么做 改变我的字体 基于操作系统。我只是不知道该怎么做 处理布局问题 这样做所产生的。

回复 ajryan, Quick_dry: :好吧,你们明白这个问题了。我想 MeasureString 可能会起作用,尽管我有兴趣进一步探索更好的方法来解决这个问题。

分割控制的问题最明显的是,例如, CheckBox. 。在那里,如果用户单击复选框的“后半部分”(这将是一个单独的 Label 我猜是控制), CheckBox 不改变状态。

有帮助吗?

解决方案

需要将一个控件布局在另一个控件中,这很奇怪。您可能错误地解决了上游问题。您是否能够将标签拆分为两个标签,其间为上下,并且可能依赖于 Windows 窗体 TableLayout 面板?

如果必须尝试根据字体大小进行定位,您可以使用 图形.测量字符串(“updown 之前的字符串”,myLabel.Font)

如果您想要的是依赖于字体的控件定位,那么您可能应该重新命名问题。


[编辑] 您可以处理标签“后半部分”的单击事件并更改该事件的复选框状态。整件事看起来就像是黑客攻击。这种奇怪的控件布局要解决什么问题?为什么标签中间需要有上下关系?

其他提示

我赞同将 TableLayoutPanel 用于单行内联控件。

我通常在设计器中将每一列和第一行设置为 AutoSize,并将每个子控件的 Dock 属性设置为 Fill。这使得水平布局能够正确显示。要使文本在标签/文本框之间对齐,请将 TextAlign 属性设置为 MiddleLeft。

如果您的文本流到下一行,则没有简单的解决方案。使用 Graphics.MeasureString/TextRenderer.MeasureText 和一些奇特的包装逻辑是你最好的选择:(

首先,您可以通过以下方式了解您使用的 Windows 版本 操作系统.平台 系统库中的属性。

其次,您可以将字体设置放在资源文件中,并根据某些条件(例如,您的操作系统版本)确定使用哪个资源文件。

但就我个人而言,我认为让您的用户确定要使用的字体会很好。 他们 更喜欢而不是您希望他们使用的字体。

最后,您可能想看一下 WPF 因为这是它旨在解决的问题空间之一。

问题出在控制装置的放置上吗?IE。您知道字体 X 和 Y 在操作系统 A 和 B 上工作,并为您在这些系统上使用的文本提供您想要的布局吗?

MeasureString 方法可能有助于以不受特定字体束缚的方式制定布局。

float textWidth = Graphics.MeasureString(someString, someFont).Width;

(文本对齐方式的改变会起作用吗?我也可能误解了这个问题)

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