
C#でのフォームのサイズを固定する方法は?
- SE
- C#でのフォームのサイズを固定したいのですが、どのように行えばよいのでしょうか。
- PM
- 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メッセージを利用して、フォームが大きくならないようにしています。
- SE
- よくわかりました。フォームのサイズを固定するにはいくつかの方法があるのですね。
- PM
- そのとおりです。実際のソースコードを参考にして、自分でソースコードを書いてみることをお勧めします。
C#における対処方法について知ろう
C#における、フォームサイズを変更されたくない場合の対処方法について説明しました。
プロパティの設定やイベントハンドラなどを利用すれば、固定サイズのフォームにできます。ぜひご自身でC#のソースコードを書いて、理解を深めてください。