C#でのフォームのサイズを固定する方法は?

- システム
エンジニア - C#でのフォームのサイズを固定したいのですが、どのように行えばよいのでしょうか。
- プロジェクト
マネージャー - FormBorderStyleプロパティをFixedSingleに設定したり、MaximumSizeとMinimumSizeを同じにしたりすることでサイズを固定にできます。
C#でのフォームのサイズを固定する方法
今回は、C#でのフォームのサイズを固定する方法について説明します。フォームのサイズを変更されたくない場合に活用できます。
C#でのフォームサイズの固定方法に興味のある方はぜひご覧ください。
FormBorderStyleをFixedSingleに設定
C#では、FormBorderStyleプロパティをFixedSingleに設定することで、フォームのサイズを固定にします。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { this.Text = "Form1"; this.Load += new EventHandler(Form1_Load); } private void Form1_Load(object sender, EventArgs e) { // FormBorderStyleの設定でサイズ固定にする this.FormBorderStyle = FormBorderStyle.FixedSingle; // 最大化・最小化の無効 this.MaximizeBox = false; this.MinimizeBox = false; } } } |
実行すると、フォームサイズが固定されていることが分かります。そのほか、FixedDialog・FixedToolWindowなど、Fixed~となっているスタイルであれば、サイズは固定になります。また、Noneを設定してもサイズは固定になります。
このように、C#では、FormBorderStyleプロパティの設定で、フォームのサイズを固定にします。
MaximumSizeとMinimumSizeを同じにする
C#では、MaximumSizeとMinimumSizeを同じにすることでサイズを固定にします。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System; using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { this.Text = "Form1"; this.Load += new EventHandler(Form1_Load); } private void Form1_Load(object sender, EventArgs e) { // MaximumSizeとMinimumSizeを同じにすることでサイズ固定にする this.MaximumSize = this.Size; this.MinimumSize = this.Size; // 最大化・最小化の無効 this.MaximizeBox = false; this.MinimizeBox = false; } } } |
実行すると、フォームサイズが固定されていることが分かります。
MaximumSizeとMinimumSizeは以下のように指定することもできます。
1 2 3 4 |
this.MaximumSize = new Size(300, 300); this.MinimumSize = new Size(300, 300); |
このように、C#では、MaximumSizeとMinimumSizeを同じにすることでサイズを固定にします。
SizeChangedイベントをハンドリングする
C#では、フォームのサイズ変更イベントを検出し、幅と高さを戻すことでサイズを固定にします。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { this.Text = "Form1"; this.Load += new EventHandler(Form1_Load); this.SizeChanged += new EventHandler(Form1_SizeChanged); } private void Form1_Load(object sender, EventArgs e) { // 最小サイズの設定 this.MinimumSize = this.Size; // 最大化・最小化の無効 this.MaximizeBox = false; this.MinimizeBox = false; } private void Form1_SizeChanged(object sender, EventArgs e) { // フォームの幅と高さを固定にする this.Width = this.MinimumSize.Width; this.Height = this.MinimumSize.Height; } } } |
実行すると、サイズ変更後にリサイズされるのでフォームがちらつく問題があります。このように、C#では、フォームのサイズ変更イベントを検出し、幅と高さを戻すことでサイズを固定にします。
WM_SIZINGメッセージを利用する
C#では、WM_SIZINGメッセージを利用すれば、さきほどのフォームがちらつく問題が解消できます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
using System; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Security.Permissions; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { this.Text = "Form1"; this.Load += new EventHandler(Form1_Load); } private void Form1_Load(object sender, EventArgs e) { // 最小サイズの設定 this.MinimumSize = this.Size; // 最大化・最小化の無効 this.MaximizeBox = false; this.MinimizeBox = false; } [StructLayout(LayoutKind.Sequential)] private struct RECT { public int Left; public int Top; public int Right; public int Bottom; } [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] protected override void WndProc(ref Message message) { // WM_SIZINGメッセージ const int WM_SIZING = 0x214; if (message.Msg == WM_SIZING) { // フォームの範囲を取得 RECT rect = (RECT)Marshal.PtrToStructure(message.LParam, typeof(RECT)); // 幅が大きすぎる時は、小さくする if (this.MinimumSize.Width < rect.Right - rect.Left) { rect.Right = rect.Left + this.MinimumSize.Width; } // 高さが大きすぎる時は、小さくする if (this.MinimumSize.Height < rect.Bottom - rect.Top) { rect.Bottom = rect.Top + this.MinimumSize.Height; } // フォームの範囲を設定 Marshal.StructureToPtr(rect, message.LParam, true); } base.WndProc(ref message); } } } |
WM_SIZINGメッセージを利用して、フォームが大きくならないようにしています。
- システム
エンジニア - よくわかりました。フォームのサイズを固定するにはいくつかの方法があるのですね。
- プロジェクト
マネージャー - そのとおりです。実際のソースコードを参考にして、自分でソースコードを書いてみることをお勧めします。
C#における対処方法について知ろう
C#における、フォームサイズを変更されたくない場合の対処方法について説明しました。
プロパティの設定やイベントハンドラなどを利用すれば、固定サイズのフォームにできます。ぜひご自身でC#のソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅)システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)