关于.net:字体相关的控件定位

关于.net:字体相关的控件定位

Font-dependent control positioning

我想在Vista上使用Segoe UI 9 pt,在Windows XP / etc上使用Tahoma 8 pt。 (实际上,我两个都愿意使用Segoe UI,但是我的用户可能没有安装它。)但是,由于两者截然不同,它们确实使我的表单布局更加混乱。那么...有什么好办法解决这个问题吗?

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

因此,最具体地说,我的问题是:如何在Label s(或CheckBox es等)中的空白中间放置控件?最普遍的说:在Windows窗体中是否有很好的方法来处理各种字体?

编辑:我不认为人们理解这个问题。我知道如何根据OS更改字体。我只是不知道该如何处理由此引起的布局问题。

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

拆分控件的问题最明显,例如CheckBox。在那里,如果用户单击CheckBox的"后半部分"(我想这是一个单独的Label控件),则CheckBox不会更改状态。


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

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

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


需要在另一个控件中布局一个控件很奇怪。您可能错误地解决了上游问题。您是否可以将标签分成两个标签,并且上下两个标签之间可能靠Windows Forms TableLayout面板?

如果必须根据字体大小定位,可以使用Graphics.MeasureString(" updown之前的字符串",myLabel.Font)

如果您要查找的是字体相关的控件定位,则可能应该重命名该问题。

[edit]您可以处理标签"后半部分"的click事件,并更改该事件的复选框状态。整个事情似乎像一个hack。这种奇怪的控件布局可以解决什么问题?为什么在标签中间需要上下放置?


解决控件的位置问题吗?也就是说,您知道字体X和Y在OS A和OS B上都可以工作,并给出所需的布局以及在这些系统上使用的文本吗?

MeasureString方法可能会帮助您以一种不受特定字体限制的方式来设计布局。

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

(是否需要更改文本对齐方式?我也可能会误解这个问题)


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

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

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

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


推荐阅读

    linux下用户权限命令?

    linux下用户权限命令?,管理,系统,密码,地址,权限,时间,基础,信息,基本知识,

    linux登陆用户命令?

    linux登陆用户命令?,系统,工具,信息,地址,软件,工作,命令,数字,服务,名称,Lin

    linux用户名改名命令?

    linux用户名改名命令?,系统,密码,命令,代码,名称,用户名,用户,终端,主机名,

    linux命令行字体大小?

    linux命令行字体大小?,系统,等级,图片,数字,工具,终端,字体,字符,图形界面,

    linux命令行字体颜色?

    linux命令行字体颜色?,系统,地址,电脑,颜色,界面,字体,关键字,字符,文本,命

    linux用户分组命令?

    linux用户分组命令?,系统,命令,电脑,信息,时间,标准,资料,用户,文件,用户组,L

    linux命令改用户所属?

    linux命令改用户所属?,系统,文件,名称,用户组,命令,用户,名录,基本知识,所

    linux系统用户组命令?

    linux系统用户组命令?,系统,管理,密码,代码,用户组,用户,命令,邮箱,电脑,名

    linux用户管理的命令?

    linux用户管理的命令?,系统,管理,信息,地址,工作,用户,单位,基础,数据,命令,L

    linux用户退出命令行?

    linux用户退出命令行?,状态,档案,标准,系统,命令,文件,模式,编辑,指令,主机,l

    linux用户自定义命令?

    linux用户自定义命令?,系统,时间,标准,软件,项目,电脑,服务,工具,基本知识,

    linux用户组命令设置?

    linux用户组命令设置?,管理,系统,密码,代码,电脑,用户组,用户,软件,新增,命

    linux进入用户命令行?

    linux进入用户命令行?,系统,地址,工作,服务,信息,命令,首页,电脑,密码,终端,L

    linux用户用不了命令?

    linux用户用不了命令?,系统,档案,不了,命令,网络,密码,信息,情况,用户,权限,l

    linux新增用户组命令?

    linux新增用户组命令?,系统,密码,新增,用户组,联系方式,软件,邮箱,工具,管

    linux显示用户名命令?

    linux显示用户名命令?,密码,系统,信息,时间,地址,命令,用户,用户名,位置,用

    linux用户常用命令?

    linux用户常用命令?,工作,地址,系统,信息,管理,目录,命令,标准,基础,常用命

    linux登陆用户的命令?

    linux登陆用户的命令?,系统,密码,工作,用户,命令,代码,第三,信息,分时,用户

    linux根用户登录命令?

    linux根用户登录命令?,系统,密码,软件,状态,地址,合法,电脑,位置,检测,工具,L

    linux命令切换用户组?

    linux命令切换用户组?,密码,系统,用户组,命令,用户,文件,信息,目录,终端,所