Я думаю, что метод 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;
}