2017-02-16 3 views
0

このコードを使用して、標準のWindowState(サイズの大きい境界線スタイル)と最大化(境界線スタイルなし)を切り替えます。Winform ClientSizeは、枠なしで最大化した後の画面サイズを超えています

if (WindowState != FormWindowState.Maximized) 
{ 
    WindowState = FormWindowState.Maximized; 
    FormBorderStyle = FormBorderStyle.None; 
} 
else 
{ 
    WindowState = FormWindowState.Normal; 
    FormBorderStyle = FormBorderStyle.Sizable; 
} 

また、変更後のフォームの一部のコントロールのレイアウトを動的に調整しています。 ClientSize.WidthClientSize.Heightの値が、最大化/境界なし状態(クライアントサイズ:1936x1216、実際のモニタ解像度:1920x1200)で実際のモニタ解像度を超えています。その結果、いくつかのコントロールが範囲外に配置されます。

フォームが画面の制限を超えていないことを確認する簡単な方法はありますか(手動で画面のサイズを確認し、そのサイズに強制的に変更する以外)

+0

は、最大許容ウィンドウサイズがモニタサイズプラスボーダーです。これにより、ウィンドウを最大化すると、境界線ではなくクライアント領域のみが表示されます。したがって、境界線を削除すると、必然的にクライアント領域が大きくなりすぎることになります。このコードを削除するだけで、必要ありません。あなたのタスクバー、質問に属している詳細をオーバーラップする場合は、WM_GETMINMAXINFOメッセージを処理する必要があります。 –

+0

フィードバックありがとうございます。私はタスクバーの問題はありません。最初に境界線をオフにすると、望ましい動作が得られることがわかりました。 – thephez

+0

このコードには意味がありません。これを削除してください。FormBorderStyleを変更すると、多くの望ましくない副作用が生じる可能性があります。あなたが知ったように。 –

答えて

0

最大化スタイルと境界スタイルの変更操作の順序を逆にすることで解決できることが判明しました。画面を最大化する前にボーダーをオフにすると、ClientSizeという形式の値は、モニターのサイズと正確に一致します。

の作業コード:全く普通のことだ

if (WindowState != FormWindowState.Maximized) 
{ 
    FormBorderStyle = FormBorderStyle.None; 
    WindowState = FormWindowState.Maximized; 
}