Windows Formsは、
マイクロソフトが提供する
.NET Frameworkに含まれるグラフィカルユーザーインターフェイス(GUI)APIおよび
アプリケーションフレームワークです。公式ドキュメントでは「Windowsフォーム」と表記され、「WinForms」と略されることもあります。
概要
Windows Formsは、
Windows API(GDI/GDI+)をマネージコードでラップし、Windowsのユーザーインターフェイス要素へのアクセスを提供します。これは、従来のVisual
C++のMFCや旧
Visual Basic(VB6)のフォームに代わるものとして登場しました。ただし、Windows FormsはMVCモデルを直接提供していません。また、
シェル関連など一部のAPIにはラッパーが存在しないため、それらを利用するには
C++/CLIでラッパーアセンブリを作成するか、P/Invokeといった手法が必要です。MFCアプリケーションからのWindows Formsコントロール利用など、相互運用機能も提供されています。
Visual Studioを利用したWindows Formsアプリケーション開発では、GUIデザイナーを用いて、
Visual Basicや
Delphiのように、画面作成やGUI部品の詳細な設定を簡単に行えます(RAD)。これは、Win32/MFCのリソースエディターとは異なり、GUIで作成したウィンドウレイアウト情報は、リソースファイルではなく、Visual Studioによって直接C#や
Visual Basic .NETなどのソースコード(コードビハインド)に変換されます。マネージ言語とIDEの親和性の高さにより、Windows Formsは生産性の高いGUIアプリケーション開発環境を実現します。
なお、Windows Formsの主な対象はデスクトップアプリケーションであり、ブラウザで動作するWebアプリケーションの開発にはASP
.NETなどが用いられます。
コード例
以下は、C#によるWindows Formsを使用した「
Hello world|Hello_world」プログラムの例です。`System.Windows.Forms`がWindows Formsの名前空間を示しています。
csharp
using System;
using System.Windows.Forms;
public class HelloWorldForm : Form
{
public HelloWorldForm()
{
Text = "Hello World";
}
[STAThread]
static void Main()
{
Application.Run(new HelloWorldForm());
}
}
ソースコード
.NET Frameworkのソースコードは、Microsoftリファレンスソースライセンス(MS-RSL)に基づき公開されており、Windows Formsも含まれます。元々
.NET Frameworkはプロプライエタリでしたが、2007年に
.NET Framework 3.5の発表に合わせて公開されました。
.NET(旧
.NET Core)のソースコードはMITライセンスで公開されており、こちらもWindows Formsが含まれています。
Windows Formsのソースコードは主にC#で記述されており、P/InvokeやCOM相互運用を利用して
Windows APIを呼び出しています。一部の実装にはVB
.NETが使用され、ネイティブ相互運用のテストコードには
C++も使用されています。
互換実装
マイクロソフトによる公式実装の他に、Monoによる互換実装(通称WinForms)が存在します。MonoのWinFormsは
.NET 1.1/2.0互換の実装を提供していますが、現在はメンテナンスフェイズに入っています。
課題と将来性
Windows Formsは
.NET Framework 1.0と共に登場し、
.NET 2.0で機能追加が行われたものの、その後は大きな変化が見られません。後発のWPF(
Windows Presentation Foundation)と比較すると、
マルチタッチや高DPI対応などの点で遅れが見られます。
.NET 4.5.1以降では高DPI環境でのコントロールのリサイズに関する機能が徐々に改善されていますが、これはデフォルトではなくオプトインでの提供です。
また、Visual
C++ではバージョン2010までWindows Formsのプロジェクトテンプレートが存在しましたが、2012以降は削除されています。
C++でWindows Formsを扱うには
C++/CLI言語が必要ですが、これはマネージコードとアンマネージコードの相互運用に限定して使用することが推奨されています。
WPFはWindows Formsの完全な後継ではありません。そのため、既存のWin32/MFCやWindows Formsのコード資産を再利用するために、相互運用機能が用意されています。しかし、一部の機能はWPFで同等のものが提供されていません。
.NET Core 3.0では、Windows版限定でWPFと共にWindows Formsが実装されました。
.NET Frameworkのメジャーアップデートは4.8で最後となりますが、メンテナンスは継続されます。
.NET Frameworkと
.NET Coreの後継である
.NET 5のWindows Formsでは、Windows Vistaで導入されたタスクダイアログのラッパークラスや、強化されたWin32リストビュー機能へのアクセスAPIが追加されるなど、オープンソースコミュニティからのプルリクエストによる新機能が導入されています。
.NET 6/7/8でも新機能が追加されており、
.NET 9でも新機能の実装が予定されています。
脚注
関連項目
基本クラスライブラリ
Visual Component Library
Windows Presentation Foundation
外部リンク
Microsoft Reference Source (#System.Windows.Forms):
.NET Framework内のソースコード(MS-RSL)
*
winforms - GitHub:
.NET(当時
.NET Core 3.0)向けに移植されたバージョン(MITライセンス)