Как я могу сделать часть формы частично прозрачной в C #? - PullRequest
7 голосов
/ 11 октября 2009

Я хочу сделать часть формы полупрозрачной, с дополнительным текстом на той части, которая не является прозрачной.

Как мне это сделать в C #?

Ответы [ 4 ]

7 голосов
/ 11 октября 2009

Я не думаю, что вы можете применить прозрачность (более правильно обозначенную, Непрозрачность ) только к части формы, а не к полной, целой форме.

Однако вы можете довольно легко создать произвольную форму (то есть непрямоугольную), при этом различные части этой формы будут прозрачными. В зависимости от того, какой именно «внешний вид» вы пытаетесь достичь, это может быть как можно ближе.

Посмотрите эти ссылки для создания собственной формы в форме:

Создание пользовательских форм Windows Forms в .NET
Пользовательская форма с раскрывающимся списком в C #
Формованные Windows Forms и элементы управления в Visual Studio .NET

Единственной другой альтернативой может быть отображение двух форм, одна из которых настроена на частичную прозрачность. Вам необходимо программно убедиться, что вторая форма расположена непосредственно рядом с «основной» формой и пропорционально перемещается / изменяется, когда пользователь перемещает / изменяет размер «основной» формы. Хотя это две формы, пользователю может показаться, что это на самом деле только одна форма, хотя это может быть довольно сложно вытащить и не будет идеальным решением (но может быть «достаточно хорошим» в зависимости от на ваши точные потребности).

5 голосов
/ 11 октября 2009

Вы можете сделать это, создав полностью прозрачное окно в своей форме, а затем поместив полупрозрачную форму поверх полностью прозрачного окна.

Сначала установите для TransparencyKey вашей основной формы значение Color.Red, затем поместите панель с именем panel1 в форму и установите для ее BackColor значение Red. Это создаст полностью прозрачное «окно». Создайте ссылку на форму на уровне формы следующим образом:

private Form _floater;

Затем поместите этот код в событие загрузки вашей основной формы:

_floater = new Form();
_floater.ShowInTaskbar = false;
_floater.FormBorderStyle = FormBorderStyle.None;
_floater.Opacity = .5;
_floater.Size = panel1.Size;
_floater.StartPosition = FormStartPosition.Manual;
_floater.Location = panel1.PointToScreen(new Point(0, 0));
_floater.Show(this);

Наконец, поместите этот код в событие Move вашей основной формы:

_floater.Location = panel1.PointToScreen(new Point(0, 0));

Единственная проблема здесь в том, что если пользователь щелкает в полупрозрачном «окне», вторая форма получает фокус, поэтому заголовок вашей основной формы отображается серым цветом.

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

0 голосов
/ 11 октября 2009

Simple:

myForm.Opacity = 80; // Change 80 with your value
0 голосов
/ 11 октября 2009

Я не уверен, возможно ли это даже с WinForms без чрезмерного использования вызовов p / invoke и обходных путей.

Вместо этого вы можете использовать Windows Presentation Foundation (WPF), где такие эффекты почти тривиальны для реализации.

...