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

时间:2009-05-07 08:05:43

标签: c# .net winforms

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

3 个答案:

答案 0 :(得分:10)

我认为我在下面写的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;
}

答案 1 :(得分: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 Property

答案 2 :(得分:0)