Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取文本基线在标签和数字UpDown中的位置?_C#_.net_Winforms_Alignment_Baseline - Fatal编程技术网

C# 如何获取文本基线在标签和数字UpDown中的位置?

C# 如何获取文本基线在标签和数字UpDown中的位置?,c#,.net,winforms,alignment,baseline,C#,.net,Winforms,Alignment,Baseline,我正试图将标签和数字上下对齐。我是在用代码,而不是设计师。如何获取文本基线的位置?对于Label控件,可以通过以下方式获取文本底部的位置: 假设.TextAlign设置为TopLeft、TopCenter或TopRight,则可以通过以下方法找到Label控件中文本的底部: dim btmOfText as single btmOfText = Label1.Font.GetHeight + Label1.Top .GetHeight方法返回标签使用的当前字体的高度(以像素为单位)。 如果.

我正试图将
标签
数字上下对齐
。我是在用代码,而不是设计师。如何获取文本基线的位置?

对于Label控件,可以通过以下方式获取文本底部的位置:

假设.TextAlign设置为TopLeft、TopCenter或TopRight,则可以通过以下方法找到Label控件中文本的底部:

dim btmOfText  as single
btmOfText = Label1.Font.GetHeight + Label1.Top
.GetHeight方法返回标签使用的当前字体的高度(以像素为单位)。
如果.TextAlign位于中间或底部,则需要进行稍微复杂的计算


同样的方法也适用于NumericUpDown控件。

//要使用坐标(pt.X,pt.Y)处的基线渲染文本,请执行以下操作:


GetHeight不返回字体基线的位置,而是返回下一行顶部的位置。Windoze字体是以这种方式拧紧的。这里没有简单的答案。我注意到Bob对我对他的答案投了反对票感到不高兴,并对我的一些帖子投了反对票。我走的是大路,而不是升级为全面战争。@dar7yl…嗯…你是谁?我看到你对我的帖子有评论,但我不明白最后一条是什么?@dar7yl:我做了一些调查。事实证明,我的一名员工表现出一种被误导和愚蠢的忠诚,表现得像个混蛋。我们已经讨论过专业性,不用说,这种情况不会再发生了,整个部门都在得到他们自己的“干净的编码员”的副本。我代表我们的组织向您道歉。让我知道你失去了多少声誉,我会让它恢复。。。在调查过程中,没有编码人员受到伤害(但很接近)。感谢您的周到和专业的回复。我对人性的信仰已经恢复。
Font myFont = Label1.Font;
FontFamily ff = myFont.FontFamily;

float lineSpace = ff.GetLineSpacing(myFont.Style);
float ascent = ff.GetCellAscent(myFont.Style);
float baseline =  myFont.GetHeight(ev.Graphics) * ascent / lineSpace;

PointF renderPt = new PointF(pt.X, pt.Y  - baseline));
ev.Graphics.DrawString("Render this string", myFont, textBrush, renderPt);