C# 获取可滚动屏幕的左下角位置

C# 获取可滚动屏幕的左下角位置,c#,winforms,C#,Winforms,说明在Winform C#应用程序中创建了一个表单 添加了一个面板(PBack),带有坞式填充。(可滚动) 然后在面板(PBack)中添加一个picturebox(pbDraw),其高度取决于图像大小 我想在当前屏幕视图的左下角添加一个控件。(假设客户端已向下滚动) 我尝试的 rect=Screen.GetWorkingArea(pbDraw) ctrl.Top=rect.Top+rect.Height ctrl.Top=Screen.PrimaryScreen.WorkingArea.Top+

说明在Winform C#应用程序中创建了一个表单

  • 添加了一个面板(PBack),带有坞式填充。(可滚动)

  • 然后在面板(PBack)中添加一个picturebox(pbDraw),其高度取决于图像大小

  • 我想在当前屏幕视图的左下角添加一个控件。(假设客户端已向下滚动)

    我尝试的

  • 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)顶部添加,而不在当前屏幕顶部

    据我所知,只考虑滚动视图本身

    获取或设置控件的上边缘与其容器的客户端区域的上边缘之间的距离(以像素为单位)。

    因此,您应该能够分配与
    pBack
    及其客户端视图相关的坐标:

    ctrl.Top = pBack.Height - ctrl.Height;
    
    假设
    ctrl
    pBack
    的子项,则此代码应将其放置在
    pBack

    更新:

    正如您在评论中所说,
    ctrl
    实际上是
    pbDraw
    的子项。在这种情况下,您需要考虑滚动。为此,您可以使用:


    如果我是你,我会将
    ctrl
    添加到图片框顶部的面板中。这将使计算相对于面板的偏移更容易。

    首先,您说“我想在当前屏幕视图的左下角添加一个控件”,然后说“…控件不在当前屏幕的顶部”。要将此控件粘贴到屏幕的顶部还是底部?是否希望此组件在滚动期间保持在位?你能给我们看看这张照片吗?我承认这是我的错。实际上,我想在当前边界的左下角显示控件。没问题,只需解决您的问题。据我所知,您希望在图像的底部添加此控件,因此用户只有在向下滚动图像时才能看到它。我说得对吗?同样,一些截图将非常感谢。我添加了描述图片。希望这会有帮助。我想在当前视图的左下角添加控件。当您向已经滚动的面板添加控件时,您必须调整其位置。添加面板的AutoScrollPosition。我恐怕不能说它不起作用。ctrl.Top=pBack.Height-ctrl.Height;第一次控制添加到我想要的确切位置。但在滚动并单击按钮再次添加控件后,其添加位置与第一次添加的位置相同。@ZohaibWaqar我已经创建了一个示例应用程序,它运行良好。您确定
    ctrl
    pBack
    的子项(即,您是这样添加的:
    pBack.Controls.Add(ctrl);
    )?不是在pBack中,而是在pDraw中添加,它是pBack及其dock fill的子项,因此:pBack(fill dock)->pDraw,然后是pDraw.Controls,Add(ctrl)PBack可滚动,PDraw高度取决于图像height@ZohaibWaqar好!!祝你今天愉快!:)
    //scroll position + panel height - control height
    ctrl.Top = pBack.VerticalScroll.Value + pBack.Height - ctrl.Height;