6

メイン フォームのボタンをクリックすると表示されるフォームがあり、ユーザーが 2 番目のフォームを閉じたときに、メイン フォームが画面の中央に再び表示されるようにします。これを行うために以下のコードを使用しました:

private void button_Click(object sender, EventArgs e)
{
    this.Hide(); //Hides the main form .
    form2.ShowDialog(); //Shows the second form .
    this.Show(); // Re-shows the main form after closing the second form ( just in the taskbar , not on the screen ) .
    this.StartPosition = FormStartPosition.CenterScreen; // I write this code because I want to show the main form on the screen , not just in the taskbar .
}

これらのコマンドは私が望むことを行いますが、問題は、2番目のフォームを閉じた後、メインフォームが瞬きのように小さなジャンプで表示されることです! (連続ではなく、最初だけです。)私が望むのは、最初はまばたきをせずにスムーズに行うことです。それはどのように可能ですか?

前もって感謝します。

4

1 に答える 1

3

不透明度をスムーズに設定してみてください (メイン フォームにはAllowTransparencyプロパティが必要trueです)。これは、同期的に行う (メイン スレッドをブロックする) ための非常に基本的な方法ですが、ほとんど時間がかからないため、これで問題ありません。Application.DoEvents() は必要ありません:

double opacity = 0.00;
while (opacity < 1)
{
    Opacity = opacity; // update main form opacity - transparency
    opacity += 0.04; // this can be changed
}
Opacity = 1.00 // make sure Opacity is 100% at the end

- - 編集

他のフォームを非表示にするために同じことができることに注意してください。最初の不透明度を 0.00 ではなく 1.00 に設定し、ループでインクリメントする代わりにデクリメント ( -= ) します。

form2.Opacity -= opacity
于 2014-08-03T18:57:29.590 に答える