[RESOLVED] Прозрачный фон у Label'ов - как его сделать?

Обсуждение проблем, возникающих при разработке программ для мобильных устройств.
NeverGone
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 10.09.2008 (Ср) 14:50
Откуда: Москва

[RESOLVED] Прозрачный фон у Label'ов - как его сделать?

Сообщение NeverGone » 22.09.2008 (Пн) 17:07

Возможно ли в VB.net 2005 поставить прозрачный фон у лэйблов? Ставлю BackColor = Transparent — фон черный...
Если пишу в коде:
Код: Выделить всё
Label.BackColor = System.Drawing.Color.Empty
— тоже черный... Если
Код: Выделить всё
Label.BackColor = System.Drawing.Color.Transparent
фон становится белым... Где-то тут писали про свойство TransparencyKey — его я не нашел... Как получить прозрачный фон? В vb6 было свойство BackStyle, а здесь?
Последний раз редактировалось NeverGone 20.03.2010 (Сб) 0:13, всего редактировалось 2 раз(а).

NeverGone
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 10.09.2008 (Ср) 14:50
Откуда: Москва

Re: Прозрачный фон у Label'ов - как его сделать?

Сообщение NeverGone » 22.09.2008 (Пн) 20:29

Нашел следующее:
zeny писал(а):Вот нашел, может кому-нибудь понадобится:
Код: Выделить всё
Public Class TransparentLabel
  Inherits Control
  Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
    'do nothing
  End Sub
  Private bPaintOnce As Boolean = False 'flag to prevent infinite loop
  Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
    If (bPaintOnce = False) Then
      bPaintOnce = True
      Me.Visible = False
      Me.Parent.Invalidate(Me.Bounds)  'more efficient than me.Parent.Refresh
      Me.Parent.Update()    'force parent to redraw only invalidated regions
      Me.Visible = True
      Return
    Else
      bPaintOnce = False
      Dim g As Graphics = e.Graphics
      Dim myBrush As SolidBrush = New SolidBrush(Me.ForeColor)
      g.DrawString(Me.Text, Me.Font, myBrush, 1, 1)
      g.Dispose()
    End If
  End Sub
End Class

ну и потом соответственно:
'В form_load или после InitializeComponent
Dim myLabel As New TransparentLabel
Me.Controls.Add(myLabel)

myLabel.BringToFront
myLabel.Left=1
myLabel.Top=1
...

Однако с этим вываливается ManifestException (ну или как-то так).
Ай нид хелп... :oops:

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Прозрачный фон у Label'ов - как его сделать?

Сообщение dr.MIG » 23.09.2008 (Вт) 11:44

Странно, у меня в VS2005 код Label1.BackColor = Color.Transparent делает Label прозрачным, задание BackColor в дизайнее форм в Transparent (вкладка Web) работает аналогично.
Salus populi suprema lex

NeverGone
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 10.09.2008 (Ср) 14:50
Откуда: Москва

Re: Прозрачный фон у Label'ов - как его сделать?

Сообщение NeverGone » 24.09.2008 (Ср) 23:01

dr.MIG писал(а):Странно, у меня в VS2005 код Label1.BackColor = Color.Transparent делает Label прозрачным, задание BackColor в дизайнее форм в Transparent (вкладка Web) работает аналогично.

Прозрачным - в смысле задается цвет, соответствующий BackColor формы? Поставил VisualStudio 2008 - то же самое. Ради эксперимента поставил на форме BackColor серым - Label немедленно принял его цвет :D А у меня под лэйблом картинка с градиентом, и хотелось бы, чтобы градиент все-таки был виден.
Можно ли как-то это реализовать?

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Прозрачный фон у Label'ов - как его сделать?

Сообщение dr.MIG » 25.09.2008 (Чт) 18:07

А... Понятно.
Так может отказаться от Label в пользу:
Код: Выделить всё
    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        e.Graphics.DrawString("Label1", Me.Font, New SolidBrush(Me.ForeColor), x, y) 'замени x и y на свои значения
    End Sub
Salus populi suprema lex

NeverGone
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 10.09.2008 (Ср) 14:50
Откуда: Москва

Re: Прозрачный фон у Label'ов - как его сделать?

Сообщение NeverGone » 25.09.2008 (Чт) 21:15

dr.MIG писал(а):А... Понятно.
Так может отказаться от Label в пользу:
Код: Выделить всё
    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        e.Graphics.DrawString("Label1", Me.Font, New SolidBrush(Me.ForeColor), x, y) 'замени x и y на свои значения
    End Sub

Отлично. Вот только:
1) как на нем обновить текст?
Код: Выделить всё
Call PictureBox1_Paint (???)
Что написать в скобках?
2) можно ли сделать выравнивание текста по правому краю?

EDIT:
Хакер писал(а):
Подпись NeverGon'а писал(а):Пожалуйста, верните на счетчик мои 16 сообщений
Такие просьбы бессмыслено помещать в подписи, и при этом постить только в разделах, которые я не читаю регулярно.
Такие просьбы надо слать мне в личку.
Спасибо.
Последний раз редактировалось NeverGone 30.12.2008 (Вт) 19:05, всего редактировалось 2 раз(а).

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16029
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Прозрачный фон у Label'ов - как его сделать?

Сообщение Хакер » 08.10.2008 (Ср) 16:54

Подпись NeverGon'а писал(а):Пожалуйста, верните на счетчик мои 16 сообщений


Такие просьбы бессмыслено помещать в подписи, и при этом постить только в разделах, которые я не читаю регулярно.

Такие просьбы надо слать мне в личку.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

boober
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 02.06.2009 (Вт) 19:37

Re: Прозрачный фон у Label'ов - как его сделать?

Сообщение boober » 02.06.2009 (Вт) 20:17

а вот на мой взгляд данный фреймворк не поддерживает прозрачные цвета. ибо я на этой почве немало ночей загубил и никак.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1273
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Прозрачный фон у Label'ов - как его сделать?

Сообщение Williams » 02.06.2009 (Вт) 20:20

Вот тут человек рассказывает как эмулировать прозрачный Label. Если поискать, можно найти еще.
И вы думаете, что вас оставят в живых после прочтения этого поста?

NeverGone
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 10.09.2008 (Ср) 14:50
Откуда: Москва

Re: Прозрачный фон у Label'ов - как его сделать?

Сообщение NeverGone » 01.02.2010 (Пн) 21:01

Если кому-то еще интересно…
Код: Выделить всё
Private Sub DrawLabelOnPicture(ByVal text As String, ByVal color As Color, ByVal target As PictureBox, ByVal grx As Graphics)
    ' For alignment center
    Dim sf As New StringFormat()
    sf.Alignment = StringAlignment.Center
    sf.LineAlignment = StringAlignment.Center
    'Draw String centered on picture
    Dim drawBounds As Rectangle = target.Bounds
    drawBounds.X -= target.Location.X - 1
    drawBounds.Y = 1
    grx.DrawString(text, New Font("Tahoma", 8, FontStyle.Regular), New SolidBrush(color), drawBounds, sf)
End Sub
Private Sub imgLogo_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles imgLogo.Paint
    DrawLabelOnPicture("VBStreets Forever", Color.Black, imgSettings_main, e.Graphics)
End Sub

Stinger
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 3
Зарегистрирован: 16.03.2015 (Пн) 22:18
Откуда: Казань

Re: [RESOLVED] Прозрачный фон у Label'ов - как его сделать?

Сообщение Stinger » 16.04.2015 (Чт) 14:17

Может быть что бы черного не было альфу какую нить как в фотошопе следует поискать?


Вернуться в Visual Basic для мобильных устройств

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList