说明在Winform C#应用程序中创建了一个表单。
添加了带有停靠类型填充的面板(PBack)。 (可滚动)
然后在面板(PBack)中添加了一个图片框(pbDraw),该图片框的高度取决于图像的大小。
我要在当前屏幕视图的左下方添加一个控件。 (假设客户端向下滚动)
我尝试过的事情
Rectangle rect = Screen.GetWorkingArea(pbDraw);
ctrl.Top = rect.Top + rect.Height;
ctrl.Top = Screen.PrimaryScreen.WorkingArea.Top + Screen.PrimaryScreen.WorkingArea.Height;
ctrl.Top = Screen.FromControl(pbDraw).WorkingArea.Top+ Screen.FromControl(pbDraw).WorkingArea.Height;
问题控件添加在pbDraw(0,0)的顶部,而不是当前屏幕边界的顶部。
答案 0 :(得分:1)
据我了解,Control.Top
仅将滚动视图考虑在内。
获取或设置控件的顶部边缘与其容器的客户区域的顶部边缘之间的距离(以像素为单位)。
因此,您应该能够分配与pBack
及其客户视图相关的坐标:
ctrl.Top = pBack.Height - ctrl.Height;
假设ctrl
是pBack
的子代,则此代码应将其放在pBack
当前(滚动)部分的底部
更新:
正如您在评论中所述,ctrl
实际上是pbDraw
的子级。在这种情况下,您需要考虑滚动。为此,您可以使用Panel.VerticalScroll
:
//scroll position + panel height - control height
ctrl.Top = pBack.VerticalScroll.Value + pBack.Height - ctrl.Height;
如果我是您,则将ctrl
添加到图片框顶部的面板中。这将使计算相对于面板的偏移更加容易。