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

Sim*_*mon 5 .net c# winforms

我有一个父母是a的控件ScrollableControl.如何找到实际对用户可见的控件部分?两者都是矩形的 - 区域没有有趣的业务.

dev*_*zer 10

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

  • {X = 0,Y = 0,宽度= 0,高度= 0} - 按钮4被滚动到视野之外.请注意,这里的值是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;
}
Run Code Online (Sandbox Code Playgroud)


CSh*_*per 3

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

来源:MSDN:ScrollableControl.AutoScrollPosition 属性