Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407

Прозрачность Label над Picturebox

23.05.2012, 19:48. Показов 3632. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть форма, на ней picturebox, над которым - label
Когда ставлю для label прозрачность ,то получаю прозрачность аж до цвета формы, хотя мне нужно достать прозрачностю только до картинки Picturebox.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2012, 19:48
Ответы с готовыми решениями:

PictureBox имеет прозрачность относительно формы, но не PictureBox, на котором расположен
Подскажите, пожалуйста. У меня такая ситуация: Один PictureBox наложен на другой. Но тот, который находится выше - должен быть с прозрачным...

Picturebox с прозрачным изображением над другим Picturebox
Всем привет! Расположил Picrurebox_MenuButton на Picturebox_MenuBackground. Но происходит вот такой косяк: При применении кода ...

Прозрачность ListBox над картинкой
У меня ListBox находится на картинке. Как сделать его прозрачным (он нужен для вывода списка). Или можно использовать другой...

15
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
23.05.2012, 20:04
abbat81,
VB.NET
1
Label1.Parent = PictureBox1
1
 Аватар для Gelo123321
22 / 22 / 8
Регистрация: 05.01.2012
Сообщений: 282
25.01.2014, 15:25
Памирыч, если использовать свой класс контролла, то он становится невидимым(( Очень жаль.
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
25.01.2014, 16:58
Gelo123321, ?? подробнее
0
 Аватар для Gelo123321
22 / 22 / 8
Регистрация: 05.01.2012
Сообщений: 282
25.01.2014, 18:53
Памирыч, если вместо Label1 использовать свой элемент управления (собственный класс), то при установки параметра Parent:
VB.NET
1
UICheckBox1.Parent = PictureBox1
Мой контролл становится невидим при запуске приложения!
Вот мой класс, если что:
UICheckBox.vb:
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
Imports System.Drawing.Drawing2D
Public Class UICheckBox
    'by Gelo123321 
    Inherits Control 'Наследуем Control
    '
    Public CheckedMe As CheckedClass
    Dim B As Bitmap, G As Graphics
    Dim C1, C2, C3, C4 As Color, P1, P2 As Pen, B1, B2, B3, B4 As Brush
    <System.ComponentModel.Description("Состояние UICheckBox")> _
    Public Property Checked() As CheckedClass
        Get
            Checked = CheckedMe
        End Get
        Set(ByVal value As CheckedClass)
            CheckedMe = value
            If CheckedMe = CheckedClass.Yes Then
                State = 0
            ElseIf CheckedMe = CheckedClass.No Then
                State = 1
            End If
            Invalidate()
        End Set
    End Property
    <System.ComponentModel.Description("Цвет фона UICheckBox")> _
    Public Property FillColor() As Color
        Get
            FillColor = C1
        End Get
        Set(ByVal value As Color)
            C1 = value
            Invalidate()
        End Set
    End Property
    <System.ComponentModel.Description("Цвет активного UICheckBox")> _
    Public Property ActivatedColor() As Color
        Get
            ActivatedColor = C2
        End Get
        Set(ByVal value As Color)
            C2 = value
            Invalidate()
        End Set
    End Property
#Region "Enums"
    Public Enum CheckedClass As Integer
        No = 0
        Yes = 1
    End Enum
#End Region
    '
    Sub New()
        SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint, True)
        C2 = Color.FromArgb(32, 32, 32)
        C3 = Color.FromArgb(230, 230, 230)
        C4 = Color.FromArgb(210, 210, 210)
        B3 = New SolidBrush(Color.FromArgb(96, 96, 96))
        B4 = New SolidBrush(Color.FromArgb(32, 32, 32))
        Font = New Font("Calibri", 10.0F) 'Шрифт тексту
        P1 = New Pen(C3)
        P2 = New Pen(C4)
        B1 = New SolidBrush(C1)
        B2 = New SolidBrush(C2)
    End Sub
    Private State = 1, St As Integer
    Protected Overrides Sub OnMouseLeave(e As EventArgs)
        St = 0
        Invalidate()
    End Sub
    Protected Overrides Sub OnMouseEnter(e As EventArgs)
        St = 1
        Invalidate()
    End Sub
    Protected Overrides Sub OnMouseClick(e As MouseEventArgs)
        If State = 0 Then
            State = 1
        Else : State = 0
        End If
        Invalidate()
    End Sub
    Protected Overrides Sub OnParentChanged(ByVal e As System.EventArgs)
        MyBase.OnParentChanged(e)
        '
        If Parent Is Nothing Then Return
        C1 = Me.Parent.BackColor
        '
    End Sub
    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
        B = New Bitmap(Width, Height)
        G = Graphics.FromImage(B)
        '
        B1 = New SolidBrush(C1)
        B2 = New SolidBrush(C2)
        '
        G.FillRectangle(B1, ClientRectangle)
        G.FillRectangle(B1, 5, 5, 10, 10)
        G.DrawLine(P1, 2, 2, 17, 2)
        G.DrawLine(P1, 17, 17, 2, 17)
        G.DrawLine(P1, 2, 17, 2, 2)
        G.DrawLine(P1, 17, 2, 17, 17)
        '
        Dim S As SizeF = G.MeasureString(Text, Font)
        G.DrawString(Text, Font, B3, 20, (Me.Height - S.Height) / 2)
        '
        Select Case State
            Case 0 'Элемент управления активен
                G.FillRectangle(B2, 5, 5, 10, 10)
                G.DrawString(Text, Font, B4, 20, (Me.Height - S.Height) / 2)
                CheckedMe = CheckedClass.Yes
            Case 1 'Элемент управления не активен
                G.FillRectangle(B1, 5, 5, 10, 10)
                G.DrawString(Text, Font, B3, 20, (Me.Height - S.Height) / 2)
                CheckedMe = CheckedClass.No
        End Select
        Select Case St
            Case 0 'Мышка на элементе управления
                G.DrawLine(P1, 2, 2, 17, 2)
                G.DrawLine(P1, 17, 17, 2, 17)
                G.DrawLine(P1, 2, 17, 2, 2)
                G.DrawLine(P1, 17, 2, 17, 17)
            Case 1 'Мышка вышла за границы элемента управления
                G.DrawLine(P2, 2, 2, 17, 2)
                G.DrawLine(P2, 17, 17, 2, 17)
                G.DrawLine(P2, 2, 17, 2, 2)
                G.DrawLine(P2, 17, 2, 17, 17)
        End Select
        Me.Width = S.Width + 20
        Me.Height = 20
        e.Graphics.DrawImage(B, 0, 0)
        B.MakeTransparent(C1)
        G.Dispose()
        B.Dispose()
    End Sub
    Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
    End Sub
End Class
Можете попробовать и сами все увидите.
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
25.01.2014, 19:12
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Gelo123321, он не становится невидимым, он получается где-то за пределами формы.

Когда делаете компонент родительским, учтите, что если его координаты были 100/100 относительно формы, то на новом родителе они будет уже 100/100 относительно родителя. Вот и прибавьте координаты родительского контролла относительно формы к координатам 100/100.

По крайней мере, это одна из причин, почему компонент пропадает из виду

Добавлено через 4 минуты
Ваш компонент проверил, он работает великолепно и отлично виден на PictureBox

Добавлено через 2 минуты
У Вас там с координатами беда, поймите, если компонент пока что лежит на пикчербоксе, не означает, что так будет при родительских отношениях.
Попробуйте тогда задать вручную
VB.NET
1
2
3
4
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        UiCheckBox1.Parent = PictureBox1
        UiCheckBox1.Location = New Point(10, 10)
    End Sub
2
 Аватар для Gelo123321
22 / 22 / 8
Регистрация: 05.01.2012
Сообщений: 282
25.01.2014, 21:20
Памирыч, действительно! Я сначала так и подумал, что контролл где то переместился, и даже увеличил размеры PictureBox1. Но надо было еще чуть добавить Кстати, фон контролла почему то не прозрачный, а белый У Вас прозрачный?
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
25.01.2014, 21:52
Gelo123321, фон - прозрачный (скрин)
Миниатюры
Прозрачность Label над Picturebox  
1
 Аватар для Gelo123321
22 / 22 / 8
Регистрация: 05.01.2012
Сообщений: 282
26.01.2014, 00:38
Памирыч, а если поставить картинку? У меня подозрение, что фон не прозрачный, он просто становится того же цвета что и фон PictureBox'а.
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
26.01.2014, 11:35
Gelo123321, Вы бы сразу все вопросы задавали
А то я проект создам, проверю, удалю.
Вы уточняете. Опять создал, проверил, удалил

Да, Ваш компонент не поддерживает прозрачность. Для проверки подсунул свой (вдруг тоже не работает)
Миниатюры
Прозрачность Label над Picturebox  
0
 Аватар для Gelo123321
22 / 22 / 8
Регистрация: 05.01.2012
Сообщений: 282
26.01.2014, 14:28
Памирыч, извиняйте А что надо сделать, что бьl мой контролл, стал поддерживвть прохрачность?
П.с. извиняйте за опечатки, на планшете у меня нету русского язьlка
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
26.01.2014, 14:34
Gelo123321, ну, если бы у меня был ответ, я бы сразу и посоветовал, еще в прошлом посте.
Но Ваш контрол даже еще в режиме дизайнера в окне свойств не желает принимать Transparent.
Я недавно выкладывал компонент, там как-то с этим проблем не было.
А тут сделано по-другому как-то, более правильно, чтоли...
0
 Аватар для Gelo123321
22 / 22 / 8
Регистрация: 05.01.2012
Сообщений: 282
26.01.2014, 14:41
Памирыч, раз не хочет принимать прозрачность, тогда мой способ не такой уж и правильньlй. В любом случаи по другому я не умею. У меня есть подозрение что во всем виноват код, где мой контролл автоматически принимает цвет. Но сейчас у меня нету возможности проверить(
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
26.01.2014, 14:45
Gelo123321, у меня как раз открыто. Вот сижу, экспериментирую

Добавлено через 1 минуту
Мне еще не по нраву надпись. Какая-то корявая, без сглаживания. Как-то в глаза бросается по сравнению с другими компонентами
0
 Аватар для Gelo123321
22 / 22 / 8
Регистрация: 05.01.2012
Сообщений: 282
26.01.2014, 14:48
Памирыч, да ето я что то напартачил со шрифтом, никак немог разобратся и оставил так(
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
26.01.2014, 15:26
Вот по Вашему алгоритм, простой примитив. Прозрачность - работает
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Class UC
    Inherits UserControl
    Dim BM As New Bitmap(100, 50)
    Dim Br As New SolidBrush(Color.FromArgb(80, 0, 0, 0))
    Sub New()
        DoubleBuffered = True
        Me.Width = 100
        Me.Height = 50
        Dim G As Graphics = Graphics.FromImage(BM)
        G.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        G.FillEllipse(Br, New Rectangle(13, 13, 30, 30))
        G.FillEllipse(Brushes.Red, New Rectangle(10, 10, 30, 30))
        BackgroundImage = BM
    End Sub
    Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
        WndProc(Message.Create(Me.Handle, &HA1, CType(2, IntPtr), 0))
        Me.Capture = False
    End Sub
End Class
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.01.2014, 15:26
Помогаю со студенческими работами здесь

Сохранить прозрачность одного PictureBox при наложении на другой
Как сделать чтоб пикчебокс просто стала прозрачной. Открыл png рисунок (сделал BackColor =trancparency но всё равно) не становится...

Почему не правильно отражается прозрачность на Button и на Label в программе запущенный на Windows 8?
Здравствуйте. После запуска программы на виндовс 8 написаной на 7-ке, прозрачность на Button и на Label пропала. В чем может быть...

Вывести в Label RGB цвет у Picturebox
Здравствуйте! Мне нужно чтобы нажал на пиксель в Picturebox и вывело RGB цвет в Label Вот есть код, но он меняет BackColor...

Как сделать прозрачность, чтобы сквозь PictureBox было видно видно другие объекты?
Я делаю несколько PictureBox с Gif-анимацией (Робот и снаряд). На заднем цвете стоит transperent, но пролетая над роботом снаряд оставляет...

Label над ProgressBar-ом с прозрачным фоном
Ни как не получается, пробую так: Me.Label1.Parent = ProgressBar1 Me.Label1.BackColor = Color.Transparent текста не видно, если...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере 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 На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru