如何在页面滚动时获取嵌套面板的相对坐标
Posted
技术标签:
【中文标题】如何在页面滚动时获取嵌套面板的相对坐标【英文标题】:How to get relative coordinates of a nested panel as page scrolls 【发布时间】:2016-08-27 17:24:41 【问题描述】:如果这对 WinForms 用户来说是一个微不足道的问题,请原谅,我来自游戏编程背景,并且 WinForms API 与我在游戏中做 UI 时使用的非常不同,这是我第一次使用 WinForms。
我有一个用户控件,附加到它的是一个面板,附加到该面板的是一个具有多行和 1 列的 TableLayoutPanel,并且在每一行中都有一个显示图像的面板。层次结构如下所示:
UserControl
|- Panel (I use this one to scroll the child of this)
|- TableLayoutPanel (many rows, 1 column, one panel per row)
|- Panel1 (contains an image)
|- Panel2 (contains an image)
...
|- PanelN (contains an image)
每一行以及其中的面板都是在运行时创建的。
现在,由于 TableLayoutPanel 通常太高而无法在一个屏幕上显示,因此我将其父面板设置为滚动。
所以这是我的问题:我需要能够搜索所有叶面板(Panel1 - PanelN),并找到当前显示在屏幕上的那些。我试图通过获取每个面板的位置 (Panel1.Location) 并查看哪个 y 坐标最接近 0,并将其用作我的起点来做到这一点。问题是我似乎无法找到对 PointToScreen、RectangleToClient、RectangleToScreen 等的正确调用组合来获取有用的数据。无论我从这些调用中得到哪个点/矩形,它们要么具有恒定的 y 值(即相对于它们的父 TableLayoutPanel 定义,不移动),要么它们确实随着滚动条移动,但是基于添加了一些常量窗口在屏幕上的位置或其相对于 UserControl 上方的某些其他父元素的位置。
当滚动条(在 Panel 上)一直位于页面顶部时,我需要进行哪些调用才能让 Panel1 的位置返回 (x, 0),并开始返回负数 (x, y
我查看了这些 *** 问题(以及许多其他资源),但其中的代码对我的问题没有帮助: Getting The Location Of A Control Relative To The Entire Screen? , c# absolute position of control on screen , How to get the Screen position of a control inside a group box control?
【问题讨论】:
【参考方案1】:试试Panel1.Top + TableLayout1.Top - Panel.VerticalScroll.Value
【讨论】:
以上是关于如何在页面滚动时获取嵌套面板的相对坐标的主要内容,如果未能解决你的问题,请参考以下文章
请教大神 在touchmoved方法中如何获取移动时x y相对触摸点移动了多