Как сохранить полосу состояния видимой везде, где пользователь прокручивает - PullRequest
1 голос
/ 16 января 2012

У меня есть форма с статус-полосой. Форма имеет автопрокрутку. При необходимости появляются полосы прокрутки, и пользователь может прокручивать.

Однако, когда содержимое больше размера формы, и пользователь должен прокрутить вниз, чтобы увидеть другие части содержимого, он / она должен полностью прокрутить вниз, чтобы увидеть полосу состояния.

Я хочу сохранить полосу состояния внизу формы независимо от размера и положения прокрутки. Как мне это сделать?

Почему я не могу поместить все на панель и установить panel.AutoScroll = true?

Поскольку я рисую все на этой панели (с помощью GDI +), затем изменяю размер, затем в форме отображаются полосы прокрутки. Теперь, если я установил автопрокрутку на панели, полосы прокрутки не отображаются, потому что на панели нет элементов управления, только рисунки GDI +.

Ответы [ 2 ]

3 голосов
/ 16 января 2012

Поместите все, что нужно прокручивать внутри панели и установите автопрокрутку на панели.Ваша строка состояния должна выходить за пределы панели.

Если вы занимаетесь интенсивным рисованием с помощью GDI +, есть два хороших варианта, которые я могу придумать для замены вашего дизайна.

  • Если пользователь должен взаимодействовать с вашей графикой, рассмотрите возможность создания пользовательского элемента управления для инкапсуляции функциональности и графики.

  • Если это не что иное, как отображение некоторых данных, вы можете нарисовать свою графикуна растровое изображение и просмотрите его в PictureBox.

Я не знаю, чего вы пытаетесь достичь, поэтому я не могу сказать, какое решение является правильным.

1 голос
/ 17 января 2012

Звучит так, будто вы делаете что-то задом наперед.«Форма» не должна отображать полосы прокрутки, панель должна быть.

Если «содержимое» вашей панели больше, чем ваша панель, и вы делаете весь этот рисунок внутри панели, тогдавам необходимо установить размер панели AutoScrollMinSize в соответствии с размером содержимого, а не увеличивать размер панели.

Установить размер содержимого панели (пример):

panel1.AutoScrollMinSize = new Size(500, 500);

Затем в событии рисования вашей панели примените преобразование:

private void panel1_Paint(object sender, PaintEventArgs e) {
  e.Graphics.TranslateTransform(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y);
  // do your normal painting here
}

Используйте панель с двойной буферизацией, чтобы избежать мерцания.

Ваш StatusStrip должен быть пристыкован к нижней частиформа, не мешающая панели.

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