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

プロパティ

プロパティ 内容
FormStartPosition StartPosition 実行時に、フォームを最初に表示する位置
Point Location スクリーン座標の左上の位置

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

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

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

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ならば、前面に表示される
bool TopLevel trueならば、トップレベル ウィンドウとして表示する
DialogResult DialogResult フォームがダイアログ ボックスとして使用されたときの結果。モーダルとして表示されているとき、これに設定するとフォームは非表示になり、結果が呼び出し元へ返される
IButtonControl AcceptButton Enterが押されたときにクリックされるボタン。そのボタンのDialogResultプロパティがNone以外に設定されていると、フォームは閉じられる
IButtonControl CancelButton Escが押されたときにクリックされるボタン。そのボタンのDialogResultプロパティがNone以外に設定されていると、フォームは閉じられる
bool KeyPreview trueならば、フォーカスのあるコントロールへキーイベントが渡される前に、フォームがそれを受け取る
Form Owner フォームを所有しているフォーム
Form[] OwnedForms フォームを所有しているすべてのフォーム
ControlCollection Controls フォームに格納されているコントロールのコレクション
Form ActiveForm このアプリケーションで、現在アクティブなフォーム
Control ActiveControl コンテナ コントロール上で、現在アクティブなコントロール
   
プロパティ - Form Class (System.Windows.Forms) | Microsoft Docs

Controlのプロパティ

StartPosition

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

FormStartPosition 列挙型
列挙子 表示位置 サイズ
CenterParent ※1 親フォームの境界内の中央  
CenterScreen 現在の表示の中央 指定された大きさ
Manual Locationプロパティの値  
WindowsDefaultBounds Windowsの既定位置  
WindowsDefaultLocation (既定) Windowsの既定位置 指定された大きさ
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 (this.Owner != null)
    {
        this.Location = new Point(
            this.Owner.Location.X + (this.Owner.Width - this.Width) / 2,
            this.Owner.Location.Y + (this.Owner.Height - this.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 Docs

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

AcceptButton

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

メソッド

メソッド 機能
Close() フォームを閉じる。モードレス ウィンドウとして表示されているときはリソースが解放されるため、Show()などで再び表示することはできない
Show() コントロールを表示する。これはVisibleをtrueとすることと同義
Hide() コントロールを隠す。これはVisibleをfalseとすることと同義
Activate() フォームにフォーカスを設定する
OnLoad(EventArgs) Loadイベントを発生する

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

OnShown(EventArgs) Shownイベントを発生する
OnFormClosing(FormClosingEventArgs) FormClosingイベントを発生する
ProcessCmdKey(Message, Keys) コマンドキーを処理できる。これでアクセラレータやメニューのショートカットの、処理を上書きできる
ProcessDialogKey(Keys) ダイアログボックス キーを処理できる。これでダイアログボックスのEnterEscキーの、処理を上書きできる
 
メソッド - Form Class (System.Windows.Forms) | Microsoft Docs
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

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

    // フォームが初めて表示される
    protected override void OnShown(EventArgs e)
    {
        base.OnShown(e);
    }

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

OnFormClosing()

protected virtual void OnFormClosing (
    System.Windows.Forms.FormClosingEventArgs e
    );
Form.OnFormClosing(FormClosingEventArgs) メソッド (System.Windows.Forms) | Microsoft Docs

閉じられる理由は引数のe.CloseReasonで確認でき、e.Cancelをtrueとするとフォームは閉じられません。

CloseReason 列挙型
列挙子 フォームが閉じられる理由
ApplicationExitCall Application.Exit()が呼び出されたため。例外を捕捉しなかったことで異常終了するときも、これに該当する
FormOwnerClosing 親フォームが閉じられるため
MdiFormClosing このMDIフォームの、親フォームが閉じられるため
TaskManagerClosing タスクマネージャーによって閉じられるため
UserClosing ユーザーによってUIを通して閉じられるため。閉じるボタンのクリックや、ウィンドウのメニューやAlt+F4など
WindowsShutDown OSがシャットダウン前にすべてのアプリケーションを閉じるため
None 未定義または特定できない理由
CloseReason Enumeration (System.Windows.Forms) | MSDN

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

ProcessCmdKey()

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

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

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

イベント

イベント 発生タイミング
EventHandler Load フォームを読み込むとき
EventHandler Activated フォームがアクティブにされたとき
EventHandler Shown フォームが最初に表示されたとき Windowsフォームの表示直後に初期化処理を行うには?[2.0のみ、C#、VB] - @IT 遠藤孝信 (2006/07/07)
CancelEventHandler Closing フォームが閉じられようとしているとき (.NET 2.0で廃止)
FormClosingEventHandler FormClosing フォームが閉じられようとしているとき
EventHandler Closed フォームが閉じられた後 (.NET 2.0で廃止)
FormClosedEventHandler FormClosed フォームが閉じられた後
EventHandler Deactivate フォームが非アクティブにされたとき
EventHandler Enter コントロールがフォーカスを得たとき
EventHandler Leave 入力フォーカスがコントロールから離れたとき
EventHandler GotFocus コントロールがフォーカスを受けたとき

これは低水準のイベントであり、Activatedを用いるForm以外ではEnterを用いる Activated - Control.GotFocus Event (System.Windows.Forms) | Microsoft Docs

EventHandler LostFocus コントロールがフォーカスが失ったとき

これは低水準のイベントであり、Deactivateを用いるForm以外ではLeaveを用いる Remarks - Control.LostFocus Event (System.Windows.Forms) | Microsoft Docs

KeyEventHandler KeyDown フォームにフォーカスがあるときに、キーが押されたとき。Control.KeyDownの継承

フォームでキー イベントを受け取るには、KeyPreviewをtrueとする。

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

イベントの発生順序

開始時

  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
  3. Leave
  4. Validating
  5. Validated
  6. LostFocus
フォーカス イベントと検証イベント - Windows フォームのイベントの順序 | MSDN
マウスやFocus()によるフォーカスの変更
  1. Enter
  2. GotFocus
  3. LostFocus
  4. Leave
  5. Validating
  6. Validated

トラブル対処法

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

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

MSDN (Microsoft Developer Network) から検索