Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
9 / 9 / 4
Регистрация: 14.02.2012
Сообщений: 49
1

Замена стандартного scrollBar на panel

26.06.2012, 20:30. Показов 3673. Ответов 7
Метки нет (Все метки)

Был разработан собственный ScrollBar. Как заменить стандартный ScrollBar который появляется на панели на мой? Если изменять св-во panel.VerticalScroll.Value, то на момент перемещения ползунка на панели появляется плохо прорисованный стандартный ScrollBar, и самого перемещения плавного нет, объекты на панели мерцают, прорисовываются полностью только по окончании сролинга. Как решить эту проблему?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2012, 20:30
Ответы с готовыми решениями:

ScrollBar у Panel
Здравствуйте! У меня на форме есть Panel, в ней PictureBox (Anchor: Left, Top). В обработчике...

Реализовать ScrollBar в panel, содержащей множество компонентов
есть panel на ней всякие компоненты , текстовые поля и тд. Хочу прикрутить справа скролл и мотать...

Замена стандартного курсора.
Esli form .enabled =false , to cursor na nem takoi ge , kak v Windows . Mogno li ego vremenno...

Замена стандартного копировщика
Здравствуйте. Подскажите, пожалуйста, программу на замену стандартному копировщику файлов windows,...

7
623 / 492 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
26.06.2012, 20:34 2
Заменить его нельзя, его можно только отменить.

1) Поместить свой скрол рядом с панелью
2) Не делать с панелью того, что приводит к её скроллу. То есть всю необходимую обработку скролла реализовать самому.
3) На панель выводить только то, что соответствует положению своего скролла.
0
9 / 9 / 4
Регистрация: 14.02.2012
Сообщений: 49
26.06.2012, 21:37  [ТС] 3
имеете ввиду самостоятельно вручную изменять Location компонентов? это будет жутко тормозить и при этом поэтапно изменять положение каждого контрола в отдельности... Никто не знает как это реализовано в виндовс, что вообще происходит при этом скролинге, поможет ли использование WinApi (изменять значение положения ползунка через WinApi)?

Добавлено через 6 минут
еще вопрос...если Panel.VerticalScroll.Visible == true, то при перемещении ползунка моего скролбара, все скролится замечательно, если же == false, то начинаются эти баги, чем может принципиально отличатся эти 2-е ситуации. Предполагаю есть винапи функция для скрытия скрол бара, может ли это помочь, (т.е в св-ве написано Panel.VerticalScroll.Visible == true, а винапи его скрывает и все скролится замечательно) ?
0
623 / 492 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
27.06.2012, 05:33 4
а что там вообще на панели?
я то думал что графика.

а контролы на панель со скроллом - это как-то необычно.
0
9 / 9 / 4
Регистрация: 14.02.2012
Сообщений: 49
27.06.2012, 14:02  [ТС] 5
Для графики проблем не возникло бы, там есть класс Matrix и методы для смещения графики, а вот с элементами управления - другое дело. По сути винда ведь все равно все прорисовывает, можно ли указать что прорисовывать компоненты надо с позиции 0;-10 к примеру? смогу обойтись просто идеей реализации, что бы все как следует работало...
0
623 / 492 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
27.06.2012, 18:06 6
А почему бы тогда не воспользоваться вместо панели контейнером по имени FlowLayoutPanel ?
Когда у меня случалось во время работы оределяемое количество контролов, я как раз эту штуку применял.
1
9 / 9 / 4
Регистрация: 14.02.2012
Сообщений: 49
27.06.2012, 18:46  [ТС] 7
Собственно функционал как у FlowLayoutPanel я как раз думал как реализовать, спасибо за наводку. Но саму проблему со скролом это никак не решает. Что бы более понятно было, скрин ниже. Вот есть несколько таких блоков с информацией на каждой странице, для этого и нужен скролбар.
0
Миниатюры
Замена стандартного scrollBar на panel  
9 / 9 / 4
Регистрация: 14.02.2012
Сообщений: 49
28.06.2012, 19:08  [ТС] 8
прокрутку сделал так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[DllImport("user32.dll")]
static extern bool ScrollWindow(IntPtr hWnd, int XAmount, int YAmount,Rectangle lpRect, Rectangle lpClipRect);
             
int old_position = 0;
 
private void verticalScrollBar1_ValueChange(object sender)
{
    int shift = old_position - (int)verticalScrollBar1.Value;
    ChangeDisplayArea(shift);
    old_position = (int)verticalScrollBar1.Value;
}
 
private void ChangeDisplayArea(int shift)
{
     Rectangle rect = new Rectangle(0, 0, panel1.Width, panel1.Height);
     ScrollWindow(panel1.Handle, 0, shift, rect, rect);
}
теперь вопрос в том какой винапи функцией можно определить максимальное значение скролбара?

Добавлено через 37 минут
наткнувшись на статью http://msdn.microsoft.com/ru-r... 71729.aspx, максимальное значение ScrollBar можно найти так:
C#
1
verticalScrollBar1.Maximum = panel1.PreferredSize.Height - panel1.Height;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2012, 19:08

Замена стандартного TreeView
Всем привет. Подскажите, пожалуйста, хорошую альтернативу TreeView - чтоб был примерно такой же...

Замена стандартного WebBrowser
Как я понял, стандартный элемент WebBrowser базируется на IE 7.0. Можно ли обновить его хотя бы до...

Замена стандартного messagebox
День добрый. Получаю с сервера oracle сообщения с помощью TOraAlerter, и вывожу содержимое...

Замена стандартного context menu
Доброе время суток.Подскажите кто знает как сделать, чтобы при правом клике мыши по ссылке,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.