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

>>> import time
>>> time.asctime(time.strptime('2008 50 1', '%Y %W %w'))
'Mon Dec 15 00:00:00 2008'

Принятие первого дня Вашей недели является понедельником, используйте %U вместо %W, если первый день Вашей недели является воскресеньем. См. документацию для strptime для деталей.

Обновление: Фиксированное недельное число. %W директива на основе 0, таким образом, неделя 51 была бы введена как 50, не 51.

7
задан MusiGenesis 11 October 2009 в 12:41
поделиться

4 ответа

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

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

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

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

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

7
ответ дан 6 December 2019 в 23:10
поделиться

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

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

private Form _floater;

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

_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));

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

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

5
ответ дан 6 December 2019 в 23:10
поделиться

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

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

-1
ответ дан 6 December 2019 в 23:10
поделиться

Простой:

myForm.Opacity = 80; // Change 80 with your value
0
ответ дан 6 December 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: