1

有什么方法可以在移动表单时使表单半透明,然后在不再移动时变得不透明?我Form_Move没有运气尝试过这个事件。
我被卡住了,有什么帮助吗?

4

2 回答 2

4

表单加载为半透明的原因是表单必须移动到起始位置,这会触发 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;
}
于 2009-10-18T08:01:53.153 回答
2

为了正确地做到这一点,我希望您需要覆盖消息处理以响应被按住的标题栏等。但是您可以作弊,只需使用计时器,以便在移动时使其不透明一段时间,所以连续运动作品:

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

显然,您可以调整它以淡入/淡出等 - 这只是为了展示整体概念。

于 2009-10-18T07:37:59.063 回答