如何找到控件的可见部分?

我有一个控件,其父级是ScrollableControl 。 如何找到实际对用户可见的控件部分? 两者都是矩形的 – 区域没有有趣的业务。

我认为下面写的GetVisibleRectangle方法就是你要求的。 滚动控件的连续运行在控件滚动时产生以下输出:

  • {X = 0,Y = 0,Width = 0,Height = 0} – button4被滚动到视野之外。 请注意,此处的值为Rectangle.Empty
  • {X = 211,Y = 36,宽度= 25,高度= 13} – 按钮4滚动,因此左上角可见
  • {X = 161,Y = 36,宽度= 75,高度= 13} – 按钮4滚动,因此上半部分和整个宽度可见
  • {X = 161,Y = 26,宽度= 75,高度= 23} – 滚动按钮4完全可见

请注意,除了宽度和高度变化之外,X,Y也会随着滚动而改变。

资源:

 private void button1_Click(object sender, EventArgs e) { Rectangle r = GetVisibleRectangle(this.panel1, button4); System.Diagnostics.Trace.WriteLine(r.ToString()); } public static Rectangle GetVisibleRectangle(ScrollableControl sc, Control child) { Rectangle work = child.Bounds; work.Intersect(sc.ClientRectangle); return work; } 

AutoScrollPosition表示可滚动控件的显示矩形的位置。 如果控件已从其起始位置(0,0)滚动,则检索到的X和Y坐标值为负。 设置此属性时,必须始终指定正X和Y值以设置相对于起始位置的滚动位置。 例如,如果您有一个水平滚动条并将x和y设置为200,则将滚动向右移动200像素; 如果然后将x和y设置为100,则滚动似乎向左跳过100个像素,因为您将其设置为距起始位置100个像素。 在第一种情况下,AutoScrollPosition返回{-200,0}; 在第二种情况下,它返回{-100,0}。

来源: MSDN:ScrollableControl.AutoScrollPosition属性

以下链接可能有助于解决此问题http://www.trace-solution.com/2012/06/how-to-get-visibleviewable-area-of-user.html 。