C# - 移动时使表格半透明

时间:2009-10-18 07:14:45

标签: c# events forms move transparent

有没有办法让表格在移动时半透明,然后在不再移动时变得不透明?我没有运气试过Form_Move事件  我被困了,有什么帮助吗?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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);
    }
}

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