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 に答える