Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/72: Рейтинг темы: голосов - 72, средняя оценка - 4.86
 Аватар для Dr.Acula
212 / 10 / 4
Регистрация: 25.04.2007
Сообщений: 67

Как сделать полупрозрачную панельку (или другой контрол)?

03.09.2008, 13:26. Показов 14782. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется на контрол цифровой карты кинуть что-то типа "легенды". Хочется сделать полупрозрачный контрол с отображением контекстной информации. Как это сделать - ума не приложу чего-то.

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

Может, кто подскажет?

зы: приложение Windows Forms под .NET Framework 3.5
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.09.2008, 13:26
Ответы с готовыми решениями:

Как сделать полупрозрачную тень по краям формы
Как реализовать ?

Как сделать выезжающую панельку без мерцаний?
Я делалаю так private void timer1_Tick(object sender, EventArgs e) { while (panel1.Left < 0) { ...

Как сделать полупрозрачную форму?
Как сделать в VB.net полупрозрачную форму?

6
Администратор
 Аватар для mik-a-el
87855 / 53176 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
03.09.2008, 13:33
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Если нужно чтобы было видно только изображение (не Control'ы), находящееся под ней, то достаточно у Panel'и выставить свойство BackColor в значение цвета, содержащее alpha-состовляющую в диапазоне 0 - 254. Вот пример установки наполовину прозрачного красного фона для кнопки:

button.BackColor = Color.FromArgb(125, Color.Red);

Только нужно иметь ввиду, что для того, чтобы Control поддерживал прозрачные цвета - у него должны быть выставлены стили
ControlStyles.SupportsTransparentBackCol or и ControlStyles.UserPaint. Например, у Button и Panel эти стили выставлены, а вот, например, у TextBox'а - нет. Если же нужно, чтобы под панелью было видно не только нарисованное изображение, но и низлежащие 'сестринские' (имеющие того же родителя) control'ы - у нее при создании нужно выставить стиль WS_EX_TRANSPARENT, указывающий окну, что сперва должны прорисоваться низлежащие окна:
Code
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
    class TransparentPanel : Panel
    {
        //Чтобы background не прорисовывался выставим флаг ControlStyles.Opaque: 
        public TransparentPanel()
        {
            SetStyle(ControlStyles.Opaque, true);
        }
 
        //И добавим к окну, при его создании, стиль WS_EX_TRANSPARENT: 
        protected override CreateParams CreateParams
        {
            get
            {
                const int WS_EX_TRANSPARENT = 0x00000020;
                CreateParams createParams = base.CreateParams;
                createParams.ExStyle |= WS_EX_TRANSPARENT;
                return createParams;
            }
        }
 
        //Теперь, чтобы панель была видна как полупрозрачная, необходимо переопределить ее метод OnPaint
        //и в нем закрашивать нужную облаcть цветом с alpha-составляющей: 
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(100, Color.Green)),
             0, 0, Width, Height);
        }
 
        //При перемещении такой 'прозрачной' панели (например, при установке свойства Control.Location) 
        //можно заметить, что  она, перемещаясь на новое место, остается с тем же background'ом, 
        //что и на прежнем месте. Так происходит потому, что низлежащие окна не перерисовываются 
        //в тех новых координатах, в которых находится наша Panel после перемещения, поэтому их нужно заставить обновиться: 
        protected override void OnMove(EventArgs e)
        {
            if (Parent != null)
                Parent.Invalidate(Bounds, true);
        }
    }
 
    class TransparentPanelDemo : Form
    {
        TransparentPanel panel;
        public TransparentPanelDemo()
        {
            panel = new TransparentPanel();
            panel.Size = new Size(50, 50);
            Button btMove1 = new Button();
            btMove1.Text = "Move 1";
            btMove1.Click += new EventHandler(OnButton1Click);
            Button btMove2 = new Button();
            btMove2.Left = btMove1.Right * 2;
            btMove2.Text = "Move 2";
            btMove2.Click += new EventHandler(OnButton2Click);
            Label lblText = new Label();
            lblText.AutoSize = true;
            lblText.Text = "label1";
            lblText.ForeColor = Color.Red;
            lblText.Top = btMove1.Bottom;
            Controls.AddRange(new Control[] { panel, btMove1, btMove2, lblText });
        }
        void OnButton1Click(object sender, EventArgs e)
        {
            panel.Left = ((Control)sender).Right * 2;
        }
        void OnButton2Click(object sender, EventArgs e)
        {
            panel.Left = 0;
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.FillEllipse(Brushes.Yellow, 20, 20, 100, 100);
        }
 
        static void Main()
        {
            Application.Run(new TransparentPanelDemo());
        }
    }
2
 Аватар для Dr.Acula
212 / 10 / 4
Регистрация: 25.04.2007
Сообщений: 67
03.09.2008, 13:44  [ТС]
А полупрозрачную вместе со всем содержимым?
0
Администратор
 Аватар для mik-a-el
87855 / 53176 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
03.09.2008, 13:49
Это с чем? С кнопками?
0
Администратор
 Аватар для mik-a-el
87855 / 53176 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
03.09.2008, 14:02
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Еще стоит покопать в сторону Layered Window API.
Пример в аттаче.
Вложения
Тип файла: zip LayeredWindow.zip (22.1 Кб, 387 просмотров)
0
0 / 0 / 0
Регистрация: 12.06.2013
Сообщений: 10
10.10.2008, 17:55
чтобы не создавать новую тему пишу здесь...
создал свой контрол, наследованный от picturebox
C#
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
public partial class xPicBox : PictureBox
{
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x00000020;  //WS_EX_TRANSPARENT  
                return cp;
            }
        }
 
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x0014:
                    return;
            }
            base.WndProc(ref m);
        }
 
        public xPicBox()
        {
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
            this.BackColor = Color.Transparent;
            InitializeComponent();
        }
 
        protected override void OnPaintBackground(PaintEventArgs e)
        {
            
        }
 
        protected override void OnMove(EventArgs e)
        {
            if (Parent != null)
                Parent.Invalidate(Bounds, true);
        }
}
полупрозрачность делаю через colormatrix, проблема что при перетаскивании контрола он моргает. Отсюда два вопроса:
1) может GDI+ не подходит для этого?
2) если подходит, то как боротся с морганием?
0
0 / 0 / 0
Регистрация: 07.05.2015
Сообщений: 7
22.02.2009, 17:14
ukrop
делай Update для твоего picturebox'a в обработчике Move или MouseMove и моргание должно исчезнуть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.02.2009, 17:14
Помогаю со студенческими работами здесь

Как сделать полупрозрачную картинку?
Пытаюсь сделать так, чтобы картинка плавно появлялась на форме. Делаю следующее: Sub Form2_Paint(sender As Object, e As...

Как узнать размер (в байтах) который занимает в даный момент форма или другой контрол
Как узнать размер (в байтах) который занимает в даный момент форма или другой контрол

Как сделать панельку вроде Output в VC++6.0?
Здравствуйте, дорогие товарищи! Хочу сделать панельку для вывода текста. Вся панель - один большой Edit или RichEdit, в который программа...

Добавление документа MS Word в RichTextBox или другой контрол
Приветствую,нужно вывести в любой контрол содержимое файла ms word, вместе с изображениями и прочим,без возможности редактирования,но с...

Сделать полупрозрачную кнопку которая всегда бы была в правом верхнем краю
Всем привет. Допустим есть большой html документ. Можно ли сделать полупрозрачную кнопку которая всегда бы была в правом верхнем краю и при...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru