因此,如果它是工具窗口或可最小化的形式,我希望能够以编程方式获得它的高度。
这可能吗?如果是这样的话?
答案 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;