【问题标题】:Getting Bottom Left location of scroll able Screen获取可滚动屏幕的左下角位置
【发布时间】:2018-10-04 05:22:07
【问题描述】:

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

  1. 添加了一个带有停靠类型填充的面板 (PBack)。 (可滚动)

  2. 然后在面板(PBack)中添加了一个图片框(pbDraw),其高度取决于图像大小。

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

我尝试了什么

  1. Rectangle rect = Screen.GetWorkingArea(pbDraw); ctrl.Top = rect.Top + rect.Height;

  2. ctrl.Top = Screen.PrimaryScreen.WorkingArea.Top + Screen.PrimaryScreen.WorkingArea.Height;

  3. ctrl.Top = Screen.FromControl(pbDraw).WorkingArea.Top+ Screen.FromControl(pbDraw).WorkingArea.Height;

问题控件添加在 pbDraw (0,0) 顶部,而不是当前屏幕边界顶部。

【问题讨论】:

  • 首先,您说“我想在当前屏幕视图的 bottom 左侧添加一个控件”然后“...控件不在当前屏幕边界 top ”。您想将此控件粘贴到屏幕的顶部还是底部?您希望此组件在滚动期间保持原位吗?可以给我们看看照片吗?
  • 我很抱歉这是我的错误。实际上我想在当前边界的左下角显示控制。
  • 没问题,解决您的问题。据我了解,您想将此控件添加到图像的底部,因此用户只有在向下滚动图像时才能看到它。我对么?同样,我们将非常感谢您提供某种屏幕截图。
  • 我添加了带有描述的图片。希望它会有所帮助我想在当前视图的左下角添加控件。
  • 当您将控件添加到已经滚动的面板时,您必须调整其位置。添加面板的 AutoScrollPosition。

标签: c# winforms


【解决方案1】:

据我了解,Control.Top 将滚动视图本身考虑在内。

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

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

ctrl.Top = pBack.Height - ctrl.Height;

假设ctrlpBack 的子代,此代码应将其放在pBack 的当前(滚动)部分的底部

更新:

正如您在 cmets 中所说,ctrl 实际上是 pbDraw 的子代。在这种情况下,您需要考虑滚动。为此,您可以使用Panel.VerticalScroll

//scroll position + panel height - control height
ctrl.Top = pBack.VerticalScroll.Value + pBack.Height - ctrl.Height;

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

【讨论】:

  • 我不敢说它不起作用。 ctrl.Top = pBack.Height - ctrl.Height;第一次控制是添加我想要的确切位置。但是在滚动并单击按钮以再次添加控件后,它的添加位置与第一次添加的位置相同。
  • @ZohaibWaqar 我已经构建了一个示例应用程序,它运行良好。你确定ctrlpBack 的孩子(即你是这样添加它的:pBack.Controls.Add(ctrl);)吗?
  • 不在 pBack 中,而是在 pDraw 中添加,它是 Pback 的子级及其停靠区填充,因此:Pback (Fill dock) -> Pdraw 然后 PDraw.Controls,Add(ctrl) PBack 是可滚动的和 PDraw 高度取决于图像高度
  • @ZohaibWaqar 好!祝你今天过得愉快! :)
猜你喜欢
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 2013-02-17
  • 2012-09-02
  • 2013-11-20
相关资源
最近更新 更多