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

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

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

4 ответов


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

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

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

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

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


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

во-первых, установите TransparencyKey вашей основной формы в цвет.Красный, затем поместите панель с именем panel1 на форме и установите его BackColor в красный цвет. Это позволит создать полностью прозрачное окно"". Создайте ссылку на форму на уровне формы следующим образом:

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

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

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

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

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


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

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


просто:

myForm.Opacity = 80; // Change 80 with your value