misc.log

日常茶飯事とお仕事と

C# モーダルとモードレスについて新人に伝えた話

今年はほんと、対面での講義や実習もほとんどない(6ヵ月で30日ちょい)という状況で、研修自体も遅れに遅れたのが9月で打ち切られたのでもう新人に何かを伝えることはありません……。ただ、Slackで指示したり伝えたことはメモしておけば誰かの役に立つでしょうから転記しておきます。

モーダルとモードレスについて

Webアプリでもそうですが、フォームやページが複数あるプログラムを作る際に、プログラムを組んだことが無い人がこのあたりの設計をやると、明確な指示がおこなわれず実装者によってやりかたがまちまちになりがちです)。

たとえばC#の場合、フォームを開く方法は大きく2つあります。

  • ShowDialogで子フォームを開いた場合、親フォームは表示されたまま利用不能状態になる …… この子フォームを「モーダルフォーム(modal form)」と呼びます。このとき親フォームでShowDialogを実行した部分は、そこで子フォームがCloseされるまで処理待ちになります。
  • Showで子フォームを開いた場合、子フォームは独立したプログラムのように動き、親フォームも子フォームも両方使えるようになります …… この子フォームを「モードレスフォーム(modeless form)と呼びます。モードレスで子フォームを開いた場合、親フォームのShow以降の処理はそのまま最後まで実行されます。

この「どちらを使うか」はそのアプリやシステムの基本的な設計指針などにも関わります。皆さんの手元には好きに使えるVisual Studioがあるので、是非いろいろ試して見て、何がどう違うのか、それぞれの注意点などを見いだしていておくと、いざ設計する側に立った時に最初からある程度精度の高い設計ができるかもしれません。

以下参考リンクです。