如何在表格中获取客户区的起始位置,相对于表格的左上角?

时间:2015-12-24 13:47:55

标签: c# .net winforms

如果我创建表单,则大小=(300,300),
然后它的.ClientRectangle属性返回{ X = 0,Y = 0 ,宽度= 292,高度= 266}

从我们收到的矩形中,似乎我们得到客户区的Size,但不是它相对于表单的左上角(标题栏上方)开始的Location和边界)..

X和Y值始终为 0,0
但我们知道表格的左上角和客户区之间存在偏差 (因为有标题栏,并形成边框)
那么我怎样才能得到实际的起点呢?

越过Control的属性,我找不到一个,
如上所述,.ClientRectangle属性的X,Y部分始终返回0,0 ..

我问这个的原因是因为如果你想使用Control.DrawToBitmap()方法,
那么你需要为它提供一个具有一定大小的Bitmap对象 如果您创建大小为Form.Size的位图,则可以捕获整个表单。

看起来像这样:

然而,如果您只想捕获表单的客户区,请执行 然后你可以用size = Form.ClientRectangle,
创建一个Bitmap对象 但是你需要知道客户端矩形在哪一点开始..
否则,你的捕获将如下所示:

可以看出,它确实在客户区的大小,但它不是从正确的位置开始..

因此,当想要仅捕获表单的客户区时,我们需要知道客户区的起始位置,相对于表的真实起点
(左上角,边界角,标题栏正上方)

1 个答案:

答案 0 :(得分:5)

你在找那个:

 // -8, -30 at my workstation
 // so 30 is a size of caption and top border
 //     8 is a left border size
 Point leftTopShift = PointToClient(this.Location);