Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/23: Рейтинг темы: голосов - 23, средняя оценка - 4.65
0 / 0 / 1
Регистрация: 28.07.2011
Сообщений: 27

Label над ProgressBar-ом с прозрачным фоном

09.08.2011, 04:17. Показов 4374. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ни как не получается, пробую так:

VB.NET
1
2
Me.Label1.Parent = ProgressBar1
Me.Label1.BackColor = Color.Transparent
текста не видно, если добавить Label1.Top = True , тогда просвечивается на сквозь.
Как же сделать Label над ProgressBar-ом с прозрачным фоном?
П.С. - Если ставить над не над ProgressBar-ом а просто на форме то все ок.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2011, 04:17
Ответы с готовыми решениями:

Label с прозрачным фоном
В общем, в теме уже всё сказано. Как сделать у System.Windows.Forms.Label прозрачный фон и возможно ли это?

ProgressBar. Отображение % выполнения на label - как сделать фон label прозрачным?
Есть прогрессбар, есть лэйбл, на котором отображается ход выполнения. Лэйбл помещена на прогрессбар. Нужно, чтобы надпись была с прозрачным...

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

11
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
09.08.2011, 22:06
На счет прозрачности лэйбла сейчас не подскажу, но текст можно написать так:
VB.NET
1
2
 ProgressBar1.CreateGraphics.DrawString("privet", New Font("Verdana", 8, FontStyle.Bold), _ 
New SolidBrush(Color.Red), 0, 0)
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
09.08.2011, 22:17
Bazzy, это неблагодарное дело - перерисовка будет становиться все жирней и некрасивей и периодически будет пропадать
Это касается перерисовки на всех элементах управления, у которых нет свойства Image или BackgroundImage

Индикатор прогресса по-видимому, как-то хитро устроен. Такое впечатление, что его "как бы нет" как контролла, потому как метка, размещенная на нем, принимает цвет формы, даже если родитель - Индикатор.

Или пользоваться способом, предложенным Bazzy, или писать свой индикатор.
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
09.08.2011, 22:48
Цитата Сообщение от Памирыч Посмотреть сообщение
Или пользоваться способом, предложенным Bazzy
нет, это не хорошо. В Win7 прогрессбар все время перерисовывается - по нему пробегает огонек что-ли. Нарисованное на нем стирается с интервалом этого пробега. Вот если б у него было событие Paint...
Пробовал, чего уж...
Цитата Сообщение от Памирыч Посмотреть сообщение
или писать свой индикатор.
самое оно! Заодно и можно еще много чего под себя сделать.
0
0 / 0 / 1
Регистрация: 28.07.2011
Сообщений: 27
09.08.2011, 22:52  [ТС]
Подскажите где почитать, чтоб свой индикатор написать.
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
09.08.2011, 23:00
Добавляем в проект новый класс:
Самодельный индикатор (класс)
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
Public Class ProgBar
 
    Dim PBMaxValue, PBValue, PBWidth As Integer
    Dim BM As Bitmap, Ctrl As Control
    Dim FirstColor, SecondColor, TColor, BordColor, BckColor As Color
    Dim Initialized As Boolean = False
 
    Sub New() 'Задаем дефолтные значения
        PBMaxValue = 200
        PBWidth = 200
        PFirstColor = Color.Blue
        PSecondColor = Color.White
        TextColor = Color.Red
        BorderColor = Color.Blue
        BackColor = Color.White
    End Sub
 
    Private Sub AcceptProperties() 'Проверяем, проинициализирован ли родительский контролл
        If Initialized = True Then
            Ctrl.Width = PWidth
            Values = PBValue
        End If
    End Sub
 
    Public ReadOnly Property PHeight() As Integer 'Высота индикатора, только для чтения
        Get
            Return 22
        End Get
    End Property
 
    Public Sub Add(ByVal Container As Control, ByVal Width As Integer)
        With Container
            .Width = Width
            .Height = PHeight
            .BackgroundImage = BM
        End With
        Ctrl = Container
        PWidth = Width
        Values = 0
        Initialized = True 'Теперь точно знаем, что индикатор куда-то врисован
    End Sub
 
    Public Property BackColor() As Color 'Цвет фона индикатора
        Get
            Return BckColor
        End Get
        Set(ByVal value As Color)
            BckColor = value
            AcceptProperties() 'AcceptProperties будет встречаться во всех свойствах для того, чтобы все их можно было применить прямо в момент выполнения прогресса
        End Set
    End Property
 
    Public Property BorderColor() As Color 'Цвет бордюра
        Get
            Return BordColor
        End Get
        Set(ByVal value As Color)
            BordColor = value
            AcceptProperties()
        End Set
    End Property
 
    Public Property TextColor() As Color 'Цвет цифры, отображающей прогресс индикатора
        Get
            Return TColor
        End Get
        Set(ByVal value As Color)
            TColor = value
            AcceptProperties()
        End Set
    End Property
 
    Public Property PFirstColor() As Color 'Первый цвет градиента (нижняя часть индикатора)
        Get
            Return FirstColor
        End Get
        Set(ByVal value As Color)
            FirstColor = value
            AcceptProperties()
        End Set
    End Property
 
    Public Property PSecondColor() As Color 'Второй цвет градиента (верхняя часть индикатора)
        Get
            Return SecondColor
        End Get
        Set(ByVal value As Color)
            SecondColor = value
            AcceptProperties()
        End Set
    End Property
 
    Public Property PWidth() As Integer 'Ширина индикатора
        Get
            Return PBWidth
        End Get
        Set(ByVal value As Integer)
            If value < 10 Then value = 10
            PBWidth = value
            AcceptProperties()
        End Set
    End Property
 
    Public Property MaxValue() As Integer 'Максимальное значение индикатора
        Get
            Return PBMaxValue
        End Get
        Set(ByVal value As Integer)
            PBMaxValue = value
            AcceptProperties()
        End Set
    End Property
 
    Public Property Values() As Integer 'Текущее значение индикатора
        Get
            Return PBValue
        End Get
        Set(ByVal value As Integer)
            PBValue = value
            If PBValue > MaxValue Then
                ErrorExc("Значение Values не может превышать MaxValue")
                Exit Property
            End If
            Progress(PBValue)
        End Set
    End Property
 
    Private Sub Progress(ByVal Prog As Integer) 'Процедура отображения (прорисовки) индикатора
        Prog = (PWidth - 6) / PBMaxValue * Prog
        BM = New Bitmap(PBWidth, 22)
        Dim G As Graphics = Graphics.FromImage(BM)
        Dim BrBorder As New SolidBrush(BordColor)
        Dim BrBack As New SolidBrush(BckColor)
        G.FillRectangle(BrBorder, New Rectangle(0, 0, PBWidth - 2, 20))
        G.FillRectangle(BrBack, New Rectangle(2, 2, PBWidth - 6, 16))
        G.DrawLine(Pens.Gray, 1, 21, PBWidth - 1, 21)
        G.DrawLine(Pens.Gray, PBWidth - 1, 1, PBWidth - 1, 21)
        Dim grad As New System.Drawing.Drawing2D.LinearGradientBrush(New Rectangle(0, 0, PBMaxValue, 16), SecondColor, FirstColor, System.Drawing.Drawing2D.LinearGradientMode.Vertical)
        Dim PBM As New Bitmap(PBWidth - 6, 16)
        Dim GP As Graphics = Graphics.FromImage(PBM)
        GP.FillRectangle(grad, New Rectangle(0, 0, Prog, 16))
        G.DrawImage(PBM, New Point(2, 2))
        Dim M As Integer = G.MeasureString(Int((Prog / (PBWidth - 6)) * 100) & "%", New Font("Arial", 10, FontStyle.Bold, GraphicsUnit.Point)).Width
        Dim Brushs As New SolidBrush(TColor)
        G.DrawString(Int((Prog / (PBWidth - 6)) * 100) & "%", New Font("Arial", 10, FontStyle.Bold, GraphicsUnit.Point), Brushs, (PBWidth - M) / 2, 3)
        Ctrl.BackgroundImage = BM
    End Sub
 
    Sub ErrorExc(ByVal Text As String) 'Процедура обработки ошибки в случае превышения значения над максимальным
        BM = New Bitmap(PBWidth, 22)
        Dim ErrGr As Graphics = Graphics.FromImage(BM)
        ErrGr.Clear(Color.Red)
        ErrGr.DrawString(Text, New Font("Tahoma", 8, FontStyle.Italic + FontStyle.Bold + FontStyle.Underline, GraphicsUnit.Point), Brushes.White, New Rectangle(0, 0, BM.Width, BM.Height))
        Ctrl.BackgroundImage = BM
    End Sub
 
End Class


В форме PictureBox1, таймер и кнопка.
Класс формы:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Class Form1
 
    Dim PB As New ProgBar
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Timer1.Enabled = True
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PB.Add(PictureBox1, 300) 'Добавляем индикатор, передавая первый параметр в качестве контролла, на котором будет расположен прогрессбар, второй - максимальное значение индикатора
        PB.BorderColor = Color.Red 'Изменяем одно из свойств индикатора (можно выполнить и до создания объекта)
        PB.PFirstColor = Color.Black
        PB.PSecondColor = Color.Yellow
        PB.TextColor = Color.Blue
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If PB.Values >= PB.MaxValue Then Exit Sub
        PB.Values += 1 'Увеличиваем значение индикатора на единицу
    End Sub
 
End Class
Не фонтан конечно, все просто, но кой-какие представления дать может, если поразбираться.
5
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
09.08.2011, 23:02
да бери тот же Picturebox для отображения индикатора. А сам индикатор - image нужных размеров. Из него создается graphics и на нем рисуется прямоугольник, который обозначает заполнение прогрессбара. Так что изучай Graphics и методы рисования в vb.net вообще.
2
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
09.08.2011, 23:39
Сейчас случайно наткнулся на одну статью на codeproject - там что-то про создание progressbara - может пригодится.
0
09.08.2011, 23:51

Не по теме:

Eugene22, солидная вещь.
Интересно, но для меня слишком сложно...

0
105 / 33 / 1
Регистрация: 01.10.2010
Сообщений: 310
10.08.2011, 17:04
Тхе, когда у меня возник тот же вопрос, как и у автора темы, я не стал заморачиваться, а тупо сделал 2 вещи.
1)загрузил в пиктур бокс серый фон(ну я тогда вообще фон-цветочки делал, но не суть важно)
2)нарисовал кнопку шириной в очень малое количество пикселей(в размере равном 1) и установил фон для неё зелёным.
А потом, отображая выполнение процесса, я просто увеличивал размер кнопки.
P.S Не могу сказать-понадобится ли вам такой способ, т.к надпись тоже растягивается, но мне как раз тогда это и было нужно.
1
4 / 4 / 0
Регистрация: 14.04.2012
Сообщений: 11
12.11.2014, 00:09
Не знаю в тему ли, но в VB 6 я для этого юзаю свойство BackStyle = Transparent.
0
 Аватар для dimsaratov
356 / 295 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5
12.11.2014, 23:02
Цитата Сообщение от Eugene22 Посмотреть сообщение
Сейчас случайно наткнулся на одну статью на codeproject - там что-то про создание progressbara - может пригодится.
только там написан С если не путаю, я что то похожее переписывал на VB NET если интересно могу выложить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.11.2014, 23:02
Помогаю со студенческими работами здесь

Конвертировать png c прозрачным фоном на jpg с "x" фоном
Ситуация такая. Обработал в фотошопе около 500 фото. Удалял фон (сделал прозрачным). Выложил фото на сайт... Сайт не работает с png и...

ImageButton с прозрачным фоном
Решил использовать кликабельные картинки, для чего разместил ImageButton и для прозрачного фона прописал в свойствах...

Изображение с прозрачным фоном
Как делать прозрачный фон у PictureBox, что бы на нем было видно фон, который на PictuBox'е под ним? Может нужно работать с масками...

Отчет с прозрачным фоном
Добрый день, в качестве фона для отчета взял рисунок, который в виде открытого свитка. Поля размести внутри его. Фон самого отчета...

TextBox с прозрачным фоном
Здравствуйте! Как можно решить проблему прозрачности TextBox? Кто встречался с этой проблемой, помогите или просто подскажите, в каком...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru