如何获取Winforms表单标题栏高度的大小?

时间:2010-01-07 18:32:23

标签: c# .net winforms

因此,如果它是工具窗口或可最小化的形式,我希望能够以编程方式获得它的高度。

这可能吗?如果是这样的话?

5 个答案:

答案 0 :(得分:53)

您可以使用以下方法确定工具窗口和普通表格的标题栏高度:

Rectangle screenRectangle=RectangleToScreen(this.ClientRectangle);

int titleHeight = screenRectangle.Top - this.Top;

这是你的表格。

ClientRectangle返回表单客户区的边界。 RectangleToScreen将其转换为屏幕坐标,这是与窗体屏幕位置相同的坐标系。

答案 1 :(得分:4)

如果您的表单是MDI应用程序中的视图,则会有额外的皱纹。在这种情况下,RectangleToScreen(this.ClientRectangle)返回相对于Form本身的坐标(正如人们所期望的那样),但是相对于MainForm,它承载托管Form的MDIClient控件。

您可以通过

来解释这个问题
Point pnt = new Point(0, 0);
Point corner = this.PointToScreen(pnt); // upper left in MainFrame coordinates
Point origin = this.Parent.PointToScreen(pnt); // MDIClient upperleft in MainFrame coordinates
int titleBarHeight = corner.Y - origin.Y - this.Location.Y;

答案 2 :(得分:0)

要修正S. Norman的答案,即只改变了自己的副题和次要理解,以下是最简单的答案:

  

int HeightOfTheTitleBar_ofThis = this.Height-this.ClientRectangle.Height;

顺便说一句,标准的硬编码标题栏为25dpi,这是最小高度,可以更改为最大50dpi。

好的,好的,...是的,这在技术上是不正确的,正如科迪·格雷(Cody Gray)所述,但它可以工作,并且应该获得与接受的答案相同的答案。无需创建矩形。

答案 3 :(得分:0)

在我的情况下,我不得不更改表格的高度,以使其刚好位于控件之一的下方,我注意到了

  int titleHeight = this.Height - screenRectangle.Height;

返回 39 ,同时接受答案:

  int titleHeight =  screenRectangle.Top - this.Top;

返回 31

可能是由于表单的底部边框。

答案 4 :(得分:-1)

这将为您提供TitleBarsize:

form.ClientRectangle.Height - form.Height;