起動時にMainFormを非表示にする

.netのMain form、即ちApplication.Runに渡すアプリケーションのメインウィンドウとなるFormオブジェクトだが、これを起動時に非表示にする真っ当な方法が無い。
WinAPI時代はPreCreateWindow等の気の利いたタイミングでWS_VISIBLEをオフする手があったが、どうも.netにはこのような手段が無い…、ようだ。
ググってみても、Application.Runに渡さずShowDialogしろとか、ActivatedハンドラでHideしろとか、なんだかすっきりしない。

そこで非表示は諦めて、透明度(Opacity)で代替してみた。
以下は初期表示にOpacityを0.0に設定(非表示状態)し、徐々に透明度を下げる(1.0に近づける)ことで1.5秒後にFormの表示が完了するようにしている。

private void Form_Load(object sender, EventArgs e)
{
  Timer timer = new Timer();
  timer.Tick += new EventHandler(OpeningTimerProc);
  timer.Interval = 10;
  timer.Start();
  timer.Tag = System.DateTime.Now.Ticks;
  this.Opacity = 0.0;
}
private void OpeningTimerProc(object sender, EventArgs e)
{
  if (sender is Timer)
  {
    long DISPLAY_TIME = 15000000;
    Timer timer = (Timer)sender;
    long w = System.DateTime.Now.Ticks - (long)timer.Tag;
    if (w >= DISPLAY_TIME)
    {
      this.Opacity = 1.0;
      timer.Stop();
    }
    else
    {
      this.Opacity = 1.0 * w / DISPLAY_TIME;
    }
  }
}

上記はアプリケーションのメインウィンドウとなるFormクラスで、Form_LoadはLoadハンドラだ。
開始時間をTagに格納し、タイマーで透明度を下げる時間の判定に使っている。
Tagはなんだか便利だ。
もちろんいきなりOpacityを1.0にしても良いが、1.5秒もアプリの起動操作に反応が無い、というのも宜しくないので、このようにしてみた。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です