字体相关的控制定位

时间:2008-09-01 00:32:32

标签: .net winforms user-interface layout fonts

我想在Vista上使用Segoe UI 9 pt,在Windows XP /等上使用Tahoma 8 pt。 (实际上,我会选择Segoe UI,但我的用户可能没有安装它。)但是,这些完全不同,他们真的搞砸了我的表单的布局。所以...有一个很好的方法来解决这个问题吗?

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

所以最具体的说,我的问题是:如何将控件放在Label s(或CheckBox es等)的空白处?最常见的是:有一种很好的方法来处理Windows窗体中不同的字体吗?

编辑 :我认为人们不理解这个问题。我知道如何根据操作系统改变我的字体。我只是不知道如何处理因这样做而产生的布局问题

回复ajryan,quick_dry :好的,你们明白这个问题。我猜MeasureString可能有用,虽然我有兴趣进一步探索解决这个问题的更好方法。

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

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

首先,您可以使用系统库中的OperatingSystem.Platform属性找出您正在使用的Windows版本。

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

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

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

答案 2 :(得分:1)

是解决控件放置的问题吗?即,您知道字体X和Y在OS A和B上工作,并根据您在这些系统上使用的文本提供所需的布局吗?

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

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

(文本对齐工作会有变化吗?我也可能误解了这个问题)

答案 3 :(得分:1)

需要将一个控件布局在另一个控件中是很奇怪的。您可能正在解决上游问题。您是否能够将标签拆分为两个标签,并且可能依赖于Windows Forms TableLayout面板?

如果尝试根据字体大小进行定位至关重要,可以使用Graphics.MeasureString(“updown之前的字符串”,myLabel.Font)

如果你所追求的是与字体相关的控制定位,你应该重新提出问题。

<小时/> [edit]您可以处理标签“后半部分”的点击事件,并更改该事件的复选框状态。整件事看起来像是黑客。这种奇怪的控制布局解决了什么问题?为什么你需要在标签中间上下?