Как мне найти видимую часть элемента управления? - PullRequest
5 голосов
/ 07 мая 2009

У меня есть элемент управления, чьим родителем является ScrollableControl. Как найти ту часть элемента управления, которая фактически видна пользователю? Оба имеют прямоугольную форму - нет ничего смешного с регионами.

Ответы [ 3 ]

10 голосов
/ 11 июня 2009

Я думаю, что метод 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;
}
3 голосов
/ 07 мая 2009

AutoScrollPosition представляет местоположение прямоугольника отображения прокручиваемого элемента управления. Полученные значения координат X и Y являются отрицательными, если элемент управления прокручивается от его начальной позиции (0,0). Когда вы устанавливаете это свойство, вы всегда должны назначать положительные значения X и Y, чтобы установить позицию прокрутки относительно начальной позиции. Например, если у вас есть горизонтальная полоса прокрутки и вы установили x и y на 200, вы переместите прокрутку на 200 пикселей вправо; если затем установить x и y равными 100, прокрутка, кажется, переместится влево на 100 пикселей, потому что вы устанавливаете его на 100 пикселей от начальной позиции. В первом случае AutoScrollPosition возвращает {-200, 0}; во втором случае возвращает {-100,0}.

Источник: MSDN: свойство ScrollableControl.AutoScrollPosition

0 голосов
/ 24 июля 2012

Следующая ссылка может помочь решить эту проблему http://www.trace -solution.com / 2012/06 / how-to-get-visible-visible-area-of-user.html .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...