Label прячется за Picturebox

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Serge200803141927
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 14.03.2008 (Пт) 19:30

Label прячется за Picturebox

Сообщение Serge200803141927 » 10.12.2008 (Ср) 20:37

Вероятно это уже обсуждалось 1000 раз, но я не нашел того решения, которое мне нужно.
Пытаюсь вытащить Label из-за Picturebox'а наверх, естественно, с сохранением прозрачности.
VB2008
Есть пустая форма. В нее из файла подгружаются контролы с абсолютными координатами:
1.Form1.BackgroundImage
2.Picturebox
3.Label
У формы фон=Picture, на ней еще небольшая Picture, на ней (должен быть на ней, а не под ней) Label
Самое простое - сказать Label'у, что у него Parent - Picturebox и Bringtofront. Но это просто только в такой конфигурации,
если у меня десятка Picturebox'ов и Label'ов - как мне вычислить под каким Picturebox'ом прячется какой Label? Сложно.
Второй вариант - использовать Label.CreateGraphics, но тут непонятно как выбрать контекст для графики,
потому что если делать CreateGraphics в Label'е, то не получится использовать его абсолютные координаты ...
Если делать CreateGraphics в From1, то Label рисуется в контексте формы, т.е. ЗА Picturebox'ом.

Заранее благодарен,
Сергей

Serge200803141927
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 14.03.2008 (Пт) 19:30

Re: Label прячется за Picturebox

Сообщение Serge200803141927 » 10.12.2008 (Ср) 23:05

ай гад ит!

Уже который раз убеждаюсь - бьюсь полдня над проблемой, пишу в форум и сразу сам нахожу решение.

Код: Выделить всё
Public Class TransparentLabel : Inherits Control
    Public Sub New()
        MyBase.New()
        Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    End Sub
    Protected Overrides Sub OnPaintBackground(ByVal e As System.Windows.Forms.PaintEventArgs)
        'do nothing
    End Sub
    Private bPaintOnce As Boolean = False
    Public deltaX, deltaY As Single
    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        If bPaintOnce = False Then
            bPaintOnce = True
            Me.Visible = False
            Me.Parent.Invalidate(Me.Bounds)
            Me.Parent.Update()
            Me.Visible = True
            Return
        Else
            bPaintOnce = False

            ' Рисуем текст
            Dim ForeColorBrush As SolidBrush = New SolidBrush(Me.ForeColor)
            e.Graphics.DrawString(Me.Text, Me.Font, ForeColorBrush, deltaX, deltaY)
        End If
    End Sub
End Class


В коде объявляем mylabel as TransparentLabel
mylabel.BackColor=Transparent
mylabel.BringToFront

Все. Лэйбл лежит поверх картинки

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Label прячется за Picturebox

Сообщение MIT » 10.12.2008 (Ср) 23:15

Serge200803141927 писал(а):Уже который раз убеждаюсь - бьюсь полдня над проблемой, пишу в форум и сразу сам нахожу решение.

У сеня тоже так сначало было :wink: , потом я переучился и стал делать так: сначала "бьюсь полдня над проблемой", только потом, если ниче не получилось "пишу в форум"
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

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

Re: Label прячется за Picturebox

Сообщение Williams » 11.12.2008 (Чт) 10:51

Когда пишешь вопрос в форум, мысли выстраиваются в нужном порядке и вероятность самостоятельного нахождения решения увеличивается на 50-75%.
И вы думаете, что вас оставят в живых после прочтения этого поста?

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Label прячется за Picturebox

Сообщение MIT » 11.12.2008 (Чт) 15:49

Williams Можно формулировать свой вопрос не только на форуме, но и дома, в блокнотике :wink: . А вообще это конечно дело каждого: если легче создавать топик и самому отвечать на вопрос, то пусть так и будет, не мне судить.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш


Вернуться в Visual Basic .NET

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

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

    TopList