#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Результат: То же самое, но с процентом прогресса:
Комментариев нет:
Отправить комментарий