Я делаю приложение .NET 3.5 с формой, которая рисует частично прозрачный черный фон. Я переопределяю OnPaintBackground, чтобы выполнить это:
protected override void OnPaintBackground( PaintEventArgs e )
{
using ( Brush brush = new SolidBrush( Color.FromArgb( 155, Color.Black ) ) )
{
e.Graphics.FillRectangle( brush, e.ClipRectangle );
}
}
Это работает, но иногда форма прорисовывается сама по себе без очистки экрана, делая прозрачность темнее, чем должна быть. Я пытался играть с Graphics.Flush()
и Graphics.Clear()
, но это либо не помогает, либо полностью удаляет прозрачность. Есть предложения?
Edit:
Вот как это выглядит после запуска приложения слева и после того, как форма несколько раз перерисовывается (в ответ на переключение с одного элемента управления на другой) справа:
Проблема прозрачности http://www.quicksnapper.com/files/5085/17725729384A10347269148_m.png
Редактировать 2:
Этим утром я попробовал несколько вещей и заметил, что когда рабочий стол за прозрачными частями меняется, он фактически не перерисовывается. Например, если я открою диспетчер задач и поместу его за окном, вы не увидите, что он обновляется сам. Это имеет смысл с тем, что я видел с уровнями прозрачности. Есть ли функция, заставляющая Windows перерисовывать область за окном?
Редактировать 3:
Я попытался изменить несколько свойств формы, но все они приводят к тому, что форма отображает непрозрачный черный цвет:
this.AllowTransparency = true;
this.DoubleBuffered = true;
this.Opacity = .99;
Я попытаюсь создать отдельное окно для прозрачной части, как уже упоминалось, но любые другие идеи все еще приветствуются.