Как реализовать собственную прокрутку в форме Windows - PullRequest
0 голосов
/ 21 августа 2011

У меня есть MdiClient, полученный из Form, и я использую поверхность этого элемента управления для рисования GDI +. У меня возникают проблемы с реализацией собственной прокрутки для этого элемента управления. Я установил для свойств AutoScroll и AutoSize значение false и пытаюсь использовать собственные горизонтальные / вертикальные полосы прокрутки вместо размещения своих собственных. Наблюдаемое поведение формы довольно запутанно. Для начала есть два свойства (A) HScroll и (B) HorizontalScroll, которые также предоставляют доступ к атрибуту Visible.

В итоге я установил HorizontalScroll.Visible = true и оставил HScroll = false (то же самое для вертикали), но мне любопытно, почему их два. Документация подразумевает, что оба контролируют видимость горизонтальной полосы прокрутки, но не имеют доступа к одним и тем же данным. Кроме того, похоже, что HScroll сбрасывается на каждой краске. На данный момент я игнорирую существование HScroll / VScroll. Это нормально для моего приложения?

Что для меня важнее, так это возможность управлять размещением большого пальца на полосах прокрутки. Я установил атрибуты VerticalScroll Minimum = 0, Maximum = 100 и Value = 50, но когда форма отображается, большой палец располагается в начале полосы прокрутки, а не в середине. Зачем? Также, когда пользователь нажимает на горизонтальную полосу прокрутки, вызывается обработчик события для горизонтальной прокрутки, но в то же время форма уже сбросила VerticalScroll.Value в 0 (без повышения события вертикальной прокрутки). Что здесь происходит?

Я, вероятно, не понимаю, как фреймворк ожидает от меня реализации того, что мне нужно. Может кто-нибудь пролить свет.

Ответы [ 2 ]

0 голосов
/ 22 августа 2011

Кредит идет к LarsTech, который указал мне на хорошее решение.Установка большого AutoScrollMinSize автоматически делает все, что нужно, включая и управляя полосами прокрутки формы.Есть одна потенциальная ловушка, за которой нужно следить.Помните, что программные попытки установить AutoScrollPosition будут игнорироваться до тех пор, пока не отобразится форма.Поэтому, если вы хотите, чтобы ваша форма открывалась с полосами прокрутки не в положении по умолчанию (0,0), поместите свой код в обработчик событий form_shown.

0 голосов
/ 21 августа 2011

Просто установите AutoScrollMinSize на желаемый холст.

Быстрый пример:

using System.Drawing;
using System.Drawing.Drawing2D;

private void Form1_Load(object sender, EventArgs e)
{
  this.AutoScrollMinSize = new Size(1200, 1200);
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
  e.Graphics.Clear(SystemColors.Window);
  using (Matrix mx = new Matrix(1, 0, 0, 1, this.AutoScrollPosition.X, this.AutoScrollPosition.Y))
  {
    e.Graphics.Transform = mx;
    e.Graphics.FillEllipse(Brushes.Red, new Rectangle(250, 250, 100, 100));
  }
}

См. Эту ссылку: Общие сведения о Windows Forms AutoScroll и Как отследить мышь на виртуальной странице

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