デフォルトでFormBorderStyle=FixedToolWindowを使用して簡単なテストフォームを作成し、マウスを押すとFixedToolWindowとSizableToolWindowを切り替えるボタンを追加しました。
FormBorderStyleをこれら2つの間で切り替えると、アプリケーションに多くの問題を引き起こす奇妙な効果が生じるようです。問題は、ウィンドウのサイズが変更されているように見えて、それができないことです。境界線を変更したいのですが、フォームのサイズを同じに保つ必要があります。
たとえば、ボタンコードは次のとおりです。
private void button1_Click(object sender, System.EventArgs e) {
if(FormBorderStyle == FormBorderStyle.FixedToolWindow) {
System.Diagnostics.Debug.WriteLine("SWITCHING: FIXED -> SIZABLE");
FormBorderStyle = FormBorderStyle.SizableToolWindow;
} else {
System.Diagnostics.Debug.WriteLine("SWITCHING: SIZABLE -> FIXED");
FormBorderStyle = FormBorderStyle.FixedToolWindow;
}
}
そしてデバッグするために私はこれを使用します:
private void Settings_SizeChanged(object sender, System.EventArgs e) {
System.Diagnostics.Debug.WriteLine(this.Size);
}
そして、スイッチボタンを押したときの出力は次のとおりです。
SWITCHING: FIXED -> SIZABLE
{Width=373, Height=169}
{Width=383, Height=179}
SWITCHING: SIZABLE -> FIXED
{Width=383, Height=179}
{Width=373, Height=169}
この動作を修正するにはどうすればよいですか?そして、「修正」とは、可能であればこれが起こらないようにすることを意味します。フォームのサイズを指定して、境界線のスタイルに関係なく、その状態を維持できるようにしたいと考えています。
また、Formクラスをサブクラス化することによる解決策は、このようなメソッドでこの問題を解決するためのアイデアとして誰かがいる場合に備えて、私にとって完璧な解決策になります。
編集:
私は問題を示すために小さなビデオを作りました。最初のテストは、フォームのサイズが実際には(視覚的に)変更されず、フォームの場所のみが少し変更されることを示しています。ただし、デバッグ出力でわかるように、Sizeプロパティの値は変更されます。デバッグ出力に表示される2番目のテストでは、フォームのサイズプロパティ値が変更され、ウィンドウサイズ自体も変更されます。
こちらをご覧ください:
http ://screencast.com/t/0vT1vCoyx2u