Найти верхнюю левую координату панели при прокрутке - PullRequest
0 голосов
/ 08 января 2010

Как найти верхнюю левую координату панели при прокрутке? (.net 2)

Скажем, пример в VB.NET, который поддерживает текстовое поле в левой границе пользовательской панели (myPanel.vb):

  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    MyBase.OnPaint(e)
    TextBox1.Location = New Point(AutoScrollPosition.X, TextBox1.Location.Y)
    ...

этот код не работает ...

Я пробовал также

Dim parentPanel As Panel = DirectCast(Parent, Panel)
TextBox1.Location = _ 
    New Point(parentPanel.AutoScrollPosition.X, TextBox1.Location.Y)

не работает так же.

В первом случае AutoscrollPosition всегда остается = 0, во втором - панель вообще не прокручивается.

Ответы [ 2 ]

2 голосов
/ 08 января 2010

Вы можете использовать AutoScrollPosition свойство

1 голос
/ 08 января 2010

Наконец, найдите проблему ... эта проблема всегда связана с фокусировкой панели к первому включенному элементу управления (в нашем случае texbox) проблема .

Когда текстовое поле активно, оно получает фокус и поворачивает позицию прокрутки назад.

Итак, решение для переноса texbox на левую границу было

A) Отключить текстовое поле (textBox1.Enabled = false)

B) На панели управления хоста переопределите OnPaint с помощью:

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
  Dim parentPanel As Panel = DirectCast(Parent, Panel)
  TextBox1.Location = _ 
      New Point(-parentPanel.AutoScrollPosition.X, TextBox1.Location.Y)

Конечно, будет интересно сделать то же самое с включенным textBox ...

...