不思議な行動FormBorderStyle間固定に大きな
質問
を生み出してい簡単なテスト形式FormBorderStyle=FixedToolWindowデフォルトの追加ボタンスイッチとFixedToolWindowとSizableToolWindowにマウスを押します。
切り替えのFormBorderStyleれるように生かそれが原因で多くの問題が私の願います。この画面のように変更のサイズと思っています。ていただきたいと思い変化の境界、さんありがとうございます。形サイズは同じです。
例えば、こちらのボタンコード:
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}
どうしたらいいですか。とにより"固定"とは、防ことが可能です。こういうことができるように指定し私の形サイズとは、どのタイプのボーダです。
またソリューションにより、サブクラスのクラスにぴったりのソリューションで、私の場合だとしてのアイデアはこの問題を解決するようなメソッドになっています。
編集:
私はちょっとビデオを発揮する問題です。最初の試験の形式サイズなので実際に変化を視覚的に、地形の変化が少;ものの価値のサイズの物件は変化していますのでデバッグ出力に出力します。第二次試験でのデバッグ出力の形式をとるサイズのプロパティ値の変更、ウィンドウサイズ自体も変化します。
ついてはこちらをご参照ください:
http://screencast.com/t/0vT1vCoyx2u
解決
お題の場所を変えないのサイズです。このコードの問題を解決しれます。
private void Form1_DoubleClick(object sender, EventArgs e)
{
Point _location = this.PointToScreen(this.ClientRectangle.Location);
if (this.FormBorderStyle == FormBorderStyle.SizableToolWindow)
{
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
}
else
{
this.FormBorderStyle = FormBorderStyle.SizableToolWindow;
}
Point _newloc = this.PointToScreen(this.ClientRectangle.Location);
Size _diff = new Size(_newloc) - new Size(_location);
this.Location -= _diff;
}
ではこの問題に描画される形で動切り替え時に両者のborderstylesはバグのDWM.
他のヒント
疑いで起こっていることは、Windows Formsは、お客様サイズ(つまり内部領域)と同じながら国境のサイズ変わります。これは一般的に良いと思うのでこの画面でも正確に合わせるコンテンツ生まれのことです。
したい場合は、同じサービスステイタスの外形寸法までを省き、サイズ変数への変更の際には、事前にボーダータイプ、そして回復していただきます。思う少し揺れています。
このた私にとって:
private Size _size;
private void Form1_DoubleClick(object sender, EventArgs e)
{
_size = this.Size;
if (this.FormBorderStyle == FormBorderStyle.SizableToolWindow)
{
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
}
else
{
this.FormBorderStyle = FormBorderStyle.SizableToolWindow;
}
this.Size = _size;
}
またこの同じ問題です。トのサイズ変更セットする場合はFormBorderStyleがないと思い入れのclientrectangle物件です。上記コードをほとんどで働くだけではなくお店のサイズを必ず店clientsize.もちろん、上記の例でも"これ"を参考にclientsize--んでした。購入とにかく、この試験:
_frmFilter.Height=300 Dim_sizeとしてのサイズ=.ClientSize _frmFilter.FormBorderStyle=FormBorderStyle.FixedToolWindow _frmFilter.ClientSize=_size