2

我想在 Vista 上使用 Segoe UI 9 pt,在 Windows XP/etc 上使用 Tahoma 8 pt。(实际上,我会满足于两者上的 Segoe UI,但我的用户可能没有安装它。)但是,它们完全不同,它们真的搞砸了我的表单布局。那么……有什么好的方法来解决这个问题吗?

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

所以最具体地说,我的问题是:如何将控件放置在我Label的 s(或CheckBoxes 等)的空白区域的中间?最普遍的是:是否有一种处理 Windows 窗体中不同字体的好方法?

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

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

拆分控件的问题在使用 a 时最为明显CheckBox。在那里,如果用户单击 CheckBox 的“后半部分”(Label我猜这将是一个单独的控件),CheckBox则不会更改状态。

4

4 回答 4

3

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

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

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

于 2008-09-01T12:25:29.110 回答
1

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

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

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

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

于 2008-09-01T00:45:37.137 回答
1

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

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

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

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

于 2008-09-01T02:02:07.907 回答
1

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

如果必须尝试根据字体大小进行定位,您可以使用Graphics.MeasureString ("String before updown", myLabel.Font)

如果您所追求的是依赖于字体的控件定位,您可能应该重新命名该问题。


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

于 2008-09-01T02:08:47.173 回答