Windows Forms

概要 
Windows Forms（WinForms）は、.NET 環境でデスクトップアプリケーションを開発するために用いられる。ウィンドウ、ボタン、テキストボックスなどの標準的なユーザーインターフェイス要素を扱うための機能を提供する。主にデスクトップアプリケーションを対象としており、Web ブラウザ上で動作するアプリケーションの開発には用いられない。

Windows Forms アプリケーションの開発にはVisual Studioが広く用いられ、フォームデザイナーを利用して画面レイアウトやユーザーインターフェイス要素を視覚的に設計できる。

 コード例 
C#によるWindows Formsを使用したHello worldプログラムの例である。ここで、System.Windows.FormsがWindows Formsの名前空間を表す。

using System;
using System.Windows.Forms;

public class HelloWorld
{
    [STAThread]
    public static void Main()
    {
        Form form = new Form();
        form.Text = "Hello world!";
        Application.Run(form);
    }
}

 ソースコード 
基本クラスライブラリをはじめとする.NET FrameworkのソースコードはMicrosoftリファレンスソースライセンス (MS-RSL) に基づいて公開されているMicrosoft Reference Source - .NET FrameworkEnd User License Agreement - MICROSOFT REFERENCE SOURCE LICENSE (MS-RSL)。この中にWindows Formsも含まれているMicrosoft Reference Source - .NET Framework (#System.Windows.Forms)。もともと.NET Frameworkはプロプライエタリでソースコードは公開されていなかったが、2007年に.NET Framework 3.5の発表に合わせて公開されたマイクロソフト、.NET Frameworkライブラリのソースコード公開へ|CodeZine（コードジン）。.NET（旧称.NET Core）のソースコードはMITライセンスに基づいて公開されており、Windows Formsも含まれているwinforms/LICENSE.TXT at main · dotnet/winforms · GitHub。

Windows Formsのソースコードの大半はC#を使って記述されており、P/InvokeやCOM相互運用を利用してWindows APIを呼び出しているが、一部の実装にVB.NETも使われているwinforms/src/Microsoft.VisualBasic.Forms/src/Microsoft/VisualBasic at main · dotnet/winforms · GitHub。ネイティブ相互運用のテストコードにはC++も使われているwinforms/src/System.Windows.Forms/tests/InteropTests/NativeTests at main · dotnet/winforms · GitHub。

 互換実装 
マイクロソフトによるWindows専用の.NET Frameworkベース公式実装のほか、Monoによる互換実装（通称WinForms）が存在するWinForms | Mono。MonoのWinFormsは.NET 1.1/2.0互換の実装を提供するが、2017年現在の開発状況はメンテナンスフェイズとなっている。

 課題と将来性 
Windows Formsは.NET Framework 1.0のリリースとともに登場したが、.NET 2.0で機能追加＠IT：特集 .NET Framework 2.0のWindowsフォーム新機能（前編）や仕様変更がなされた後は大きな変化がない。.NET 3.0で導入され、Windowsのバージョンアップとともに継続的に機能追加がなされた後発のデスクトップアプリケーションフレームワークであるWPFに比べると、マルチタッチやDPI Awareアプリの高DPI(High DPI)対応について 第2回 ～ アプリケーションの高DPIへの対応レベル ～ – 田中達彦のブログWindows フォーム アプリの DPI Aware への変更 言語: XMLなどに標準で対応していないなど、最新の技術動向は反映されにくい傾向にある。.NET 4.5.1, .NET 4.5.2, .NET 4.6, .NET 4.7ではそれぞれ高DPI環境下でのWindows Formsコントロールのリサイズに関する機能が徐々に拡張・改善されているが、既定ではなくオプトインであるアプリの高DPI(High DPI)対応について 第1回 ～ 高DPIとは ～ – 田中達彦のブログWhat's new in the .NET Framework | Microsoft Docs。

また、Visual C++にはバージョン2010までWindows Formsのアプリケーションプロジェクトテンプレートが存在していたが、バージョン2012以降は削除されている。もともとVisual C++においてマネージコンポーネントであるWindows Formsを扱うにはC++/CLI言語を使用する必要があったが、C++/CLIはマネージコードとアンマネージコードの相互運用を行なうグルー言語用途としてのみ使用することが推奨されているVisual Studio 2012、2013 で Visual C++ の Windows フォーム アプリケーション テンプレートが削除され、新規に作成できない。

しかし、後継となるWPFはMFCやWindows Formsの完全なスーパーセットではなく、一部は同等機能が用意されていない。Win32/MFCやWindows Formsで作成されたコード資産を再利用するため、WPFアプリケーションでもWin32/MFCやWindows Formsとの連携を行なうシナリオを想定した相互運用機能が用意されているWPF and Win32 Interoperation | Microsoft DocsWalkthrough: Hosting a Windows Forms Control in WPF | Microsoft DocsWPF と Win32 の相互運用性に関する概要 | Microsoft Docsチュートリアル : Windows Presentation Foundation での Windows フォーム コントロールのホスト | Microsoft Docs。

.NET Core 3.0では、Windows版限定ではあるがWPFとともにWindows Formsが実装されたWindows Forms アプリを .NET Core 3.0 に移植する - .NET Core | Microsoft Docs。.NET Frameworkのメジャーアップデートは4.8で最後となるが、メンテナンスは継続される。

.NET Frameworkと.NET Core双方の後継となる.NET 5のWindows Formsでは、Windows Vistaで導入されたタスクダイアログのラッパークラスや、強化されたWin32リストビュー機能へのアクセスAPIが追加されるなど、オープンソース開発コミュニティによるプルリクエストを取り込んだ新機能が導入されたWindows Forms 5.0の新機能 - InfoQWindows フォーム .NET 5 の新機能 - Windows Forms .NET | Microsoft Learn。.NET 6/7/8でも新機能がいくつか追加されており、.NET 9でも新機能の実装が予定されているMicrosoft Build 2024で発表されたWindowsデスクトップ開発まわりの情報 | MESCIUS.devlog - メシウス株式会社。

 脚注 

 関連項目 
 基本クラスライブラリ
 Visual Component Library
 Windows Presentation Foundation

 外部リンク 
 Microsoft Reference Source (#System.Windows.Forms): .NET Framework内のソースコード。MS-RSL。
 : .NET（当時.NET Core 3.0）向けに移植されたバージョン。MITライセンス。

Category:.NET
Category:ウィジェット・ツールキット