MessageBoxにVisualStyleが適用されない
MessageBox#Showだが、アラートを表示するために久しぶりに使ってみるとWindowsXPのVisualStyleが適用されていないことに気が付いた。
前に使ったときはちゃんとVisualStyleは適用されていたけどなぁ、と思っていろいろ試してみたところ、MessageBox#Showメソッドの第6パラメタを指定するとVisualStyleが適用されないようだ。
[STAThread] static void Main(string[] args) { Application.EnableVisualStyles(); DialogResult result = MessageBox.Show("VisualStyleが有効にならないのは何故" , "どうして" , MessageBoxButtons.OK , MessageBoxIcon.Exclamation , MessageBoxDefaultButton.Button1 , MessageBoxOptions.DefaultDesktopOnly); Application.Run(new Form()); }
試しにMessageBoxOptionsを指定しないで実行したところ、
と、VisualStyleが正しく適用されるのだが、MessageBoxOptionsを指定しない場合、システムモーダル※TopMostなウインドウにならないので、アラートとしては使えない。バグかな。
※今でもついつい使ってしまうのだが、現在のWindows O/SのAPIでは"システムモーダル"なウインドウという概念は通常使わない。