ダイアログはユーザと対話するために非常に便利で欠かせない存在です。そんなダイアログでも頻繁に表示するとわずらわしかったりと、使い方を誤ると不便なものとなってしまいます。特にダイアログを表示中はアプリケーションの操作が出来なくなってしまいます(それがモーダルダイアログの特徴でもあります)。そこでダイアログを快適に表示する方法を考えてみたいと思います。

モーダルダイアログを表示することで発生する問題

 先にも述べましたが、ダイアログを表示しているとアプリケーションの操作が出来なくなります。これはフォームの移動や最小化など、直接アプリケーションの操作とは関係のない、ウィンドウの操作についても同様です。

 こんな状況を想像してみてください。入力フォームの、ある項目をダイアログから入力しています。入力する内容の参考となるファイルがデスクトップに置かれていたり、ダイアログの裏に表示されている場合、どうやったらそれを見ることができるでしょうか?

 通常はウィンドウを最小化したり、移動したりすることで、デスクトップや裏に隠れているウィンドウを表示することができます(このような操作をされる方を中心に話を進めていきます)。しかし、ダイアログが表示されている場合はそうはいきません。特にダイアログの親ウィンドウが最大化していた場合は、通常の操作でデスクトップや裏に隠れているウィンドウを表示することは不可能です。一旦ダイアログを閉じるしか方法がありません。

 もちろん「デスクトップを表示」するアイコンをクリックしたり、タスクバーのウィンドウを選択、エクスプローラの表示などでデスクトップや裏に隠れているウィンドウを表示することは可能です。しかしこれらの操作をユーザは普段から行っていません。普段行っている操作でいつもと変わらない結果をユーザは望むと思います。それがダイアログを表示することで思わぬ結果となってしまいます。

 モーダルダイアログというのは、それを表示させたアプリケーションだけの操作を出来なくするものです。しかし、実際は他のアプリケーションの操作にも十分影響が出てしまっているのです。

モーダルダイアログにウィンドウ操作を

 では、どうすれば他のアプリケーションに影響が出ないようにダイアログを表示することが出来るのでしょうか。それはダイアログを表示している最中でも、その親ウィンドウに対してウィンドウの操作(移動・最小化・最大化・サイズ変更など)を行えるようにすればいいのではないかと思います。

 しかし、そのような操作は出来ません。もしダイアログの親ウィンドウに対してウィンドウ操作が行えたとして、何か問題が発生するのでしょうか。発生する問題はほとんど無いと思います。確認できている問題としては、親ウィンドウを無理やり最小化するとダイアログが閉じてしまうことです。どうやら根本的にウィンドウの操作は認められていないようです。

 それでも出来ることとして、ダイアログの裏に表示されているウィンドウにアクセスする手段はあります。それはダイアログを最小化することです。ダイアログを最小化すると親ウィンドウは常に非アクティブ状態になります。そうなると裏で表示されていたウィンドウが前面に表示されるようになります。これで裏に隠れているウィンドウを表示することが出来るようになります。

 普段表示しているダイアログにはいろいろと制限を設けていることが多いのではないでしょうか。具体的にいうと「フォームの最小化・最大化・サイズ変更ができない」「タスクバーにフォームが表示されない」「フォームのアイコンが設定されていない」などです。

 果たしてダイアログの表示にそのような制限は本当に必要なのでしょうか。必要なケースはかなり限られるのではないかと思います。その制限をなくすことでダイアログが表示されても、快適に操作ができるようになると思います。

ダイアログを快適に表示するために行うこと
  • フォームの最小化・最大化・サイズ変更を可能にする
  • タスクバーにフォームを表示する
  • フォームのアイコンを設定する

 やり過ぎかもしれませんが、出来ることならメッセージボックスにも上記のことを行えるようにしてもいいのではないかと思います。

 今回いろいろと考えてみて、ダイアログを表示中にデスクトップのファイルにアクセスする方法を見つけられなかったのが残念です。また、タスクバーを右クリックして表示されるメニューの「~表示」を選択すると、最大化していた親ウィンドウも一緒に「~表示」されます。これが出来るならウィンドウ操作をやらせて欲しいものです。それと、是非ともダイアログの最小化に合わせて親ウィンドウも最小化して欲しいと思います。