Form

クラス階層

  • System.ComponentModel.Component
    • System.Windows.Forms.Control
      • System.Windows.Forms.ScrollableControl
        • System.Windows.Forms.ContainerControl
          • System.Windows.Forms.Form
Form クラス (System.Windows.Forms) | MSDN

プロパティ

静的プロパティ
プロパティ 内容
Form ActiveForm このアプリケーションで、現在アクティブなフォーム。アクティブなフォームがないときはnullで、そのときはこのアプリケーション自体がアクティブではない
プロパティ 内容
bool IsMdiContainer trueならば、FormはMDI子フォームのコンテナ。既定はfalse
Point Location スクリーン座標の左上の位置

表示前にこれを指定する場合、StartPositionがManualでなければ無視される。

Size Size フォームのサイズ
Size MinimumSize フォームをリサイズするときの最小サイズ

この制限を無効化するには、Size.Empty (0x0の大きさ) を設定する

Size MaximumSize フォームをリサイズするときの最大サイズ

この制限を無効化するには、Size.Empty (0x0の大きさ) を設定する

AutoSizeMode AutoSizeMode フォームを自動的にサイズ変更するときに使用するモード
FormStartPosition StartPosition 実行時に、フォームを最初に表示する位置とサイズ
Size ClientSize フォームのクライアント領域のサイズ
Rectangle Bounds コントロールのサイズと位置。サイズは非クライアント要素を含む、位置は親コントロール相対
Rectangle DesktopBounds デスクトップ座標でのフォームのサイズと位置。デスクトップ座標とは、タスクバーを除いたスクリーンの作業領域
Point DesktopLocation デスクトップ座標でのフォームの位置
FormBorderStyle FormBorderStyle フォームの境界線
SizeGripStyle SizeGripStyle フォーム右下に表示するサイズ グリップの様式
  • Auto … 必要なときに自動で表示 [既定]。必要なときとはFormBorderStyleがSizableまたはSizableToolWindowで、FormをShowDialog()で表示したとき SizeGripStyle.Auto behaviour
  • Show … つねに表示
  • Hide … つねに非表示
bool ShowInTaskbar trueならば、フォームをタスクバーに表示する。既定はtrue

FormBorderStyleを**ToolWindowとするときは、これをfalseとする。

bool ShowIcon trueならば、フォームのキャプションバー (タイトルバー) にアイコンが表示される
bool ControlBox trueならば、フォームのキャプションバーにコントロールボックスが表示される
bool MinimizeBox trueならば、フォームのキャプションバーに最小化ボタンが表示され、システムメニューの[最小化]が有効となる
(最大化ボタンが表示されているならば、非表示ではなく無効になる)
bool MaximizeBox trueならば、フォームのキャプションバーに最大化ボタンが表示され、システムメニューの[最大化]が有効となる
(最小化ボタンが表示されているならば、非表示ではなく無効になる)

falseにすると、キャプションバー のダブルクリックによる最大化が無効になる

bool TopMost trueならば、最上位 (topmost) に表示される
bool TopLevel trueならば、トップレベル ウィンドウとして表示する
FormWindowState WindowState フォームが最小化、最大化または通常の状態であるか
DialogResult DialogResult フォームがダイアログ ボックスとして使用されたときの結果。モーダルとして表示されているとき、これに設定するとフォームは非表示になり、結果が呼び出し元へ返される
IButtonControl AcceptButton Enterが押されたときにクリックされるボタン。そのボタンのDialogResultプロパティがNone以外に設定されていると、フォームは閉じられる
IButtonControl CancelButton Escが押されたときにクリックされるボタン。そのボタンのDialogResultプロパティがNone以外に設定されていると、フォームは閉じられる
bool KeyPreview trueならば、フォーカスのあるコントロールへキーイベントが渡される前に、フォームがそれを受け取る
bool AutoScroll trueならば自動スクロール (autoscrolling) が有効で、コントロールがクライアント領域外にあるときにスクロール バーが表示される。既定はfalse
Point AutoScrollPosition 自動スクロールの位置
bool VScroll trueならば、垂直スクロール バーが表示されている
bool HScroll trueならば、水平スクロール バーが表示されている
Color TransparencyKey フォームの透明な領域を表す色。BackColorと同じ色を指定するとその部分が透明になり、背景にある他のウィンドウが表示されるようになる。またマウスのクリックも透過される
Form Owner フォームを所有しているフォーム
Form[] OwnedForms フォームを所有しているすべてのフォーム
ControlCollection Controls フォームに格納されているコントロールのコレクション
Control ActiveControl コンテナ コントロール上で、現在アクティブなコントロール
AutoValidate AutoValidate フォーカスが変更されたときに、コンテナのコントロールを自動的に検証する方法。既定はInherit
   
プロパティ - Form Class (System.Windows.Forms) | Microsoft Learn

Controlのプロパティ

StartPosition

Form.StartPosition プロパティ (System.Windows.Forms) | MSDN

FormStartPosition 列挙型
列挙子 表示位置 サイズ
CenterParent ※1 親フォームの境界内の中央  
CenterScreen 現在の表示の中央 指定された大きさ
Manual Locationプロパティの値  
WindowsDefaultBounds Windowsの既定位置 既定の大きさ WindowsDefaultBounds - Form.cs
WindowsDefaultLocation (既定) 指定された大きさ
FormStartPosition 列挙型 (System.Windows.Forms) | MSDN

※1 CenterParentの指定は、Formがモードレスとして表示されたときには適切に設定されません。そのような場合にはManualに指定し、次のように手動で計算します。c# - How to CenterParent a non-modal form - Stack Overflow

protected override void OnLoad(EventArgs e)
{
    if (Owner != null)
    {
        Location = new Point(
            Owner.Location.X + (Owner.Width - Width) / 2,
            Owner.Location.Y + (Owner.Height - Height) / 2);
    }
}

FormBorderStyle

FormBorderStyle 列挙型
列挙子 境界線 サイズの変更
None なし ×
Fixed3D 3次元の境界線 ×
FixedDialog ダイアログ様式の境界線 ×
FixedSingle 単一の境界線 ×
FixedToolWindow サイズ変更不可能な、ツールウィンドウの境界線 ×
SizableToolWindow サイズ変更可能な、ツールウィンドウの境界線
Sizable サイズ変更可能な、境界線 [既定]
FormBorderStyle 列挙型 (System.Windows.Forms) | MSDN

FormBorderStyleをFixedToolWindowまたはSizableToolWindowにすると最小化と最大化のボタンが表示されなくなりますが、これはそれらが機能しなくなるわけではなく、システムメニューからは操作できます。よってそれらの機能を無効にしたいのならば、MinimizeBoxとMaximizeBoxプロパティをfalseに設定します。

AutoScaleMode

コントロールの自動スケーリング モードを設定または取得できます。Form上のコントロールの大きさが意図したとおりにならないときには、この設定を確認します。ContainerControl.AutoScaleMode Property (System.Windows.Forms) | Microsoft Learn

AutoScaleMode列挙型
列挙子 数値 意味 備考
None 0 自動スケーリングは無効  
Font 1 クラスが使用するフォントのサイズに応じてスケールを制御 通常はシステム フォント
Dpi 2 ディスプレイの解像度に応じてスケールを制御 一般的な解像度は、96と120dpi
Inherit 3 クラスの親のスケーリング モードに従ってスケールを制御 親が存在しない場合、自動スケーリングは無効
AutoScaleMode Enum (System.Windows.Forms) | Microsoft Learn

Owner

TopLevelがfalseのFormに設定すると「トップレベルのコントロールにのみ、オーナーを指定できます。」としてArgumentExceptionが投げられます。Owner - Form.cs

AcceptButton

Form.AcceptButton プロパティ (System.Windows.Forms) | Microsoft Learn

メソッド

メソッド 機能
Show() コントロールを表示する。Control.Show()が呼ばれるだけであり、Visibleをtrueとすることと同じ
Show(IWin32Window) コントロールを表示する。引数がOwnerプロパティに設定され、Visibleがtrueとなる
ShowDialog(IWin32Window) モーダル ダイアログボックスとして、コントロールを表示する。
Hide() コントロールを隠す。Control.Hide()が呼ばれるだけであり、Visibleをfalseとすることと同じ
Close() フォームを閉じる
Activate() フォームにフォーカスを設定する
OnLoad(EventArgs) Loadイベントを発生する
OnShown(EventArgs) Shownイベントを発生する
OnFormClosing(FormClosingEventArgs) FormClosingイベントを発生する
ProcessCmdKey(Message, Keys) コマンドキーを処理できる。これでアクセラレータやメニューのショートカットの、処理を上書きできる
ProcessDialogKey(Keys) ダイアログボックス キーを処理できる。これでダイアログボックスのEnterEscキーの、処理を上書きできる
 
メソッド - Form Class (System.Windows.Forms) | Microsoft Learn
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    // フォームが読み込まれる
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
    }

    // フォームが初めて表示される (ただしShowDialog()で表示されたときは、2回目以降も発生する)
    protected override void OnShown(EventArgs e)
    {
        base.OnShown(e);
    }

    // フォームが閉じられようとしている
    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        base.OnFormClosing(e);
    }
}

Show(IWin32Window)

このメソッドの呼び出しは、Ownerプロパティを設定してShow()を呼び出すのと同じです。 Remarks - Form.Show(IWin32Window) Method (System.Windows.Forms) | Microsoft Learn Show - Form.cs

Close()

モードレス ウィンドウとして表示されているときはリソースが解放されるため、Show()などで再び表示することはできません。表示しようとすると「破棄されたオブジェクトにアクセスできません。」として、ObjectDisposedExceptionが投げられます。

モーダルとして表示しているときにDialogResultを設定せずClose()で閉じるとDialogResult.Cancelに設定されるため、他の値とするならばDialogResultを設定することでウィンドウを閉じます。

ProcessCmdKey()

アクセラレータやメニューのショートカットなどの、コマンドキーを処理できます。このメソッドはそれらのキー入力を上書きする場合に有用です。

protected override bool ProcessCmdKey (
    ref System.Windows.Forms.Message msg,
    System.Windows.Forms.Keys keyData
    );
Form.ProcessCmdKey(Message, Keys) メソッド (System.Windows.Forms) | Microsoft Learn

たとえば、他のFormへキーを送ることに利用できます。c# - Send Keyboard Events from one Form to another Form - Stack Overflow

イベント

イベント 発生タイミング
EventHandler Load フォームを読み込むとき

ShowDialog()で表示されたときは、表示されるたびに発生する

EventHandler Shown フォームが最初に表示されたとき Windowsフォームの表示直後に初期化処理を行うには?[2.0のみ、C#、VB] - @IT 遠藤孝信 (2006/07/07)

ShowDialog()で表示されたときは、表示されるたびに発生する

CancelEventHandler Closing フォームが閉じられようとしているとき (.NET 2.0で廃止)
FormClosingEventHandler FormClosing フォームが閉じられようとしているとき
EventHandler Closed フォームが閉じられた後 (.NET 2.0で廃止)
FormClosedEventHandler FormClosed フォームが閉じられた後
EventHandler Activated フォームがアクティブにされたとき
EventHandler Deactivate フォームが非アクティブにされたとき
イベント 発生タイミング
EventHandler Enter コントロールがフォーカスを得たとき
EventHandler GotFocus コントロールがフォーカスを受けたとき
EventHandler Leave コントロールから入力フォーカスが離れたとき
EventHandler LostFocus コントロールがフォーカスが失ったとき
イベント 発生タイミング
EventHandler Resize コントロールがリサイズされたとき
EventHandler ResizeBegin フォームがリサイズモードに入ったとき。このモードへは、フォームの境界がドラッグされたときなどになる

また、フォームが移動されたときにも発生する

EventHandler ResizeEnd フォームがリサイズモードを抜けたとき
ScrollEventHandler Scroll ユーザーまたはコードが、クライアント領域をスクロールしたとき
KeyEventHandler KeyDown フォームにフォーカスがあるときに、キーが押されたとき。Control.KeyDownの継承

フォームにフォーカスを得るコントロールがあるときは、KeyPreviewをtrueとしなければこのイベントは発生しない

     
イベント - Form Class (System.Windows.Forms) | Microsoft Learn

イベントの発生順序

開始時 (スタートアップ)

  1. Control.HandleCreated
  2. Control.BindingContextChanged
  3. Form.Load … フォームを読み込むとき
  4. Control.VisibleChanged
  5. Form.Activated … フォームがアクティブにされたとき
  6. Form.Shown … フォームが最初に表示されたとき
アプリケーションのスタートアップ イベントとシャットダウン イベント - Windows フォームのイベントの順序 | MSDN

終了時 (シャットダウン)

  1. Form.Closing … フォームが閉じているとき (.NET 2.0で廃止)
  2. Form.FormClosing … ユーザーがフォームを閉じるときに、フォームが閉じられる前と閉じる理由を指定する前
  3. Form.Closed … フォームが閉じたとき (.NET 2.0で廃止)
  4. Form.FormClosed … ユーザーがフォームを閉じるときに、フォームが閉じられた後と閉じる理由を指定した後
  5. Form.Deactivate … フォームが非アクティブにされたとき
  6. Control.HandleDestroyed

フォーカス時

キーボードやSelect()によるフォーカスの変更
  1. Enter
  2. GotFocus
  1. Leave
  2. Validating ※1
  3. Validated ※1
  4. LostFocus
フォーカス イベントと検証イベント - Windows フォームのイベントの順序 | MSDN
※1 CausesValidationがfalseのときは発生しない
マウスやFocus()によるフォーカスの変更
  1. Enter
  2. GotFocus
  1. LostFocus
  2. Leave
  3. Validating ※1
  4. Validated ※1
※1 CausesValidationがfalseのときは発生しない

リサイズ時

  1. ResizeBegin
  2. SizeChanged ※1
  3. Resize ※1
  4. Layout ※1
  5. ResizeEnd
※1 リサイズを終了するまで、これらはこの順でくり返し発生する

Load

Formが表示される直前でなければ確定していない情報に依存する処理は、このハンドラ内に記述します。c# - What setup code should go in Form Constructors versus Form Load event? - Stack Overflow

このイベントはShow()で表示したときは最初に表示される直前にだけ発生し、非表示にしてからShow()で再び表示しても発生しません。一方でShowDialog()で表示したときは、非表示にした後もShowDialog()を呼ぶたびに発生します。これはShownイベントも同様です。c# - Form.Load event triggered every time - Stack Overflow

FormClosing

閉じられる理由はハンドラのe.CloseReasonで確認でき、e.Cancelをtrueとするとフォームは閉じられません。Form.FormClosing イベント (System.Windows.Forms) | Microsoft Learn

CloseReason 列挙型
列挙子 フォームが閉じられる理由
None 0 未定義または特定できない理由
WindowsShutDown 1 OSがシャットダウン前にすべてのアプリケーションを閉じるため

WM_QUERYENDSESSIONまたはWM_ENDSESSIONメッセージが通知されたとき WindowsShutDown - Form.cs

MdiFormClosing 2 このMDIフォームの、親フォームが閉じられるため
UserClosing 3 ユーザーによってUIを通して閉じられるため

閉じるボタンのクリックや、ウィンドウのメニューやAlt+F4など。Close()の呼び出しもこれに該当する

TaskManagerClosing 4 タスクマネージャーによって閉じられるため

taskkillコマンドもこれに該当する

Windows 8.1以降ではタスクマネージャーがタスクを終了するときにWM_SYSCOMMANDメッセージを発行するようになったため、UserClosingと通知される Fields - CloseReason Enum (System.Windows.Forms) | Microsoft Learn winforms - 'End Task' in Task Manager always sets CloseReason.UserClosing - Stack Overflow

FormOwnerClosing 5 親フォームが閉じられるため
ApplicationExitCall 6 Application.Exit()またはRestart()が呼び出されたため

例外を捕捉しなかったことで異常終了するときも、これに該当する

CloseReason Enum (System.Windows.Forms) | Microsoft Learn

閉じられたFormにアクセスすると「破棄されたオブジェクトにアクセスできません。」として、System.ObjectDisposedException例外が発生します。

FormClosed

このイベントは、次のときに発生します。Remarks - Form.FormClosed Event (System.Windows.Forms) | Microsoft Learn

  • ユーザーによって閉じられる
  • Close()が呼ばれる
  • Application.Exit()

Ownerプロパティが設定されていないと、所有しているフォームが閉じられるときに、FormClosingとFormClosedは自動で呼ばれません。

Form form = new Form();
form.Shown += delegate { }; // 呼ばれる
form.FormClosing += delegate { }; // 呼ばれない
form.FormClosed += delegate { }; // 呼ばれない

//form.Show(this); // Owner設定あり
form.Show(); // Owner設定なし

トラブル対処法

コントロールへ追加できない

ControlへFormを追加するときに「トップレベルのコントロールをコントロールに追加できません。」としてArgumentException例外が発生するときには、そのFormのTopLevelプロパティをfalseに設定します。c# - Top-level control cannot be added to a control - Stack Overflow

Form form1 = new Form();
Form form2 = new Form();

form1.TopLevel = false;
form2.Controls.Add(form1); // ArgumentException
Microsoft Learnから検索