Прокручивание формы

We use cookies. Read the Privacy and Cookie Policy

Прокручивание формы

Если форма не умещается на экране целиком, то пользователь может прокрутить ее стилусом с помощью полос прокрутки. Особенно это полезно, если учесть, что .NET Compact Framework 2.0 теперь поддерживает свойство AutoScroll. Но смартфоны не имеют сенсорного экрана, реагирующего на стилус. Для прокрутки формы надо искать другой вариант.

Например, можно воспользоваться обработкой события KeyDown. В тестовом проекте надо растянуть форму так, чтобы нижнюю часть не было видно на экране смартфона. На форме надо разместить несколько надписей, причем одна из них должна располагаться в нижней части формы. Для свойства формы AutoScroll надо задать значение True. В листинге 9.5 приведен пример кода для прокрутки формы.

Листинг 9.5

private void Form1_KeyDown(object sender, KeyEventArgs e) {

 if ((e.KeyCode == System.Windows.Forms.Keys.Up)) {

  // Up

  this.AutoScrollPosition =

   new Point(-this.AutoScrollPosition.X, -this.AutoScrollPosition.Y - 16);

 }

 if ((e.KeyCode == System.Windows.Forms.Keys.Down)) {

  // Down

  this.AutoScrollPosition =

   new Point(-this.AutoScrollPosition.X, -this.AutoScrollPosition.Y + 16);

 }

 if ((e.KeyCode == System.Windows.Forms.Keys.Left)) {

  // Left

  this.AutoScrollPosition =

   new Point(-this.AutoScrollPosition.X - 16, -this.AutoScrollPosition.Y);

 }

 if ((e.KeyCode == System.Windows.Forms.Keys.Right)) {

  // Right

  this.AutoScrollPosition =

   new Point(-this.AutoScrollPosition.X + 16, -this.AutoScrollPosition.Y);

 }

}

После запуска приложения можно нажимать на клавиши навигации. Написанный код позволит прокручивать форму в выбранном направлении. Но здесь нас подстерегает одна опасность. Код будет работать лишь тогда, когда форма имеет фокус. Если форма содержит элементы управления, то фокус может находиться у данного элемента. И тогда нажатия на клавиши навигации не принесут желаемого результата. Это ограничение легко обходится добавлением соответствующего обработчика события, как показано в листинге 9.6.

Листинг 9.6

private void Form1_Load(object sender, EventArgs e) {

 pictureBox1.Focus();

 this.pictureBox1.KeyDown += new KeyEventHandler(Form1_KeyDown);

}

Теперь, даже если фокус находится не у формы, пользователь все равно сможет прокручивать форму при помощи клавиш навигации.