Как сделать часть формы частично прозрачной в 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), где такие эффекты почти тривиальны для реализации.