Есть ли способ сделать форму полупрозрачной, пока она перемещается, а затем стать непрозрачной, когда она больше не перемещается? Я пробовал событие Form_Move
безуспешно.
Я застрял, чем помочь?
С# - сделать форму полупрозрачной при движении
Ответы (2)
Причина, по которой форма загружается как полупрозрачная, заключается в том, что форма должна быть перемещена в исходное положение, что вызывает событие Move. Вы можете преодолеть это, основываясь на том, установлена ли непрозрачность, полностью ли загружена форма.
Событие ResizeEnd срабатывает после завершения перемещения формы, поэтому должно работать что-то вроде этого:
bool canMove = false;
private void Form1_Load(object sender, EventArgs e)
{
canMove = true;
}
private void Form1_Move(object sender, EventArgs e)
{
if (canMove)
{
this.Opacity = 0.5;
}
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
this.Opacity = 1;
}
Чтобы сделать это правильно, я полагаю, вам нужно переопределить обработку сообщений, чтобы реагировать на удерживание строки заголовка и т. д. Но вы можете схитрить и просто использовать таймер, чтобы сделать его непрозрачным для некоторое время при перемещении, поэтому непрерывное движение работает:
[STAThread]
static void Main()
{
using (Form form = new Form())
using (Timer tmr = new Timer())
{
tmr.Interval = 500;
bool first = true;
tmr.Tick += delegate
{
tmr.Stop();
form.Opacity = 1;
};
form.Move += delegate
{
if (first) { first = false; return; }
tmr.Stop();
tmr.Start();
form.Opacity = 0.3;
};
Application.Run(form);
}
}
Очевидно, вы можете настроить это так, чтобы оно появлялось/исчезало и т. д. — это просто для того, чтобы показать общую концепцию.