Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

Немигающий progressBar с возможностью задать текст внутри

#c_sharp #winforms #progress_bar #компоненты


Иногда нужно иметь прогрессбар с текстом внутри, а нейтивный прогрессбар не имеет
возможности выдавать текст внутри даного компонента.
Как реализовать?

В интернете всюду решения которые или с рамкой вокруг текста (тупо лейбл на прогрессбар
налеплен) или кастомные компоненты, которые банально мигают во время работы.
    


Ответы

Ответ 1



Т.к. всюду встречал только мигающие (blinking/flickering) решения, то решился написать свой собственный компонент -- TextProgressBar и поделится с общественностью. Соурс код можно найти здесь: https://github.com/ukushu/TextProgressBar Примеры: Особенности кода, которые нужно иметь ввиду тому, кто решится повторить "подвиг": Отсутствие мигания кастомного компонента можно достигнуть при помощи кода, оторый отключает "лишние" стили оригинального компонента SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); на стадии инициализации компонента. Так же можно столкнутся с проблемами обновления настроек заданных через VisualStudio. Для того что бы это обойти, нужно вызывать при изменении проблемных property: Invalidate(); что бы вижуалка перерисовала заново компонент. И так же не нужно допускать ошибку которую я сначала допустил при написании: не забываем что многие из классов для отрисовки элементов (да и сам контрол) являются дочерними от IDispousable, а, значит, должны вызывать .Dispose как только будут не нужны. Для распихивания пропертей по категориям в вижуалке нужно подписывать их следующим образом [Category("Additional Options")] //обьявление самой проперти Все остальное - просто логика отрисовки и реализации вашего кастомного компонента.

Ответ 2



Так уж вышло что заодно и WPF начал осваивать... Мало ли, может кому пригодится: Value/Maximum Результат: То же самое, но с процентом прогресса:

Комментариев нет:

Отправить комментарий