コンテンツにスキップ

「Windows Forms」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
外部リンクをできる限り脚注として本文に組み入れる。
.NET 5以降の開発状況に関して追記。
 
1行目: 1行目:
'''Windows Forms'''は[[マイクロソフト]]の[[.NET Framework]]に含まれる[[グラフィカルユーザーインターフェイス]][[アプリケーションプログラミングインターフェイス|API]]の名称である。日本語版の公式ドキュメント(旧[[Microsoft Developer Network|MSDN]]ライブラリ)では「Windowsフォーム」と表記されている<ref>[https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2008/dd30h2yb(v=vs.90) Windows フォーム | Microsoft Docs]</ref>。「WinForms」と略記されることもある<ref>[http://c1.grapecity.com/superproducts/studiowinforms/ Windowsフォーム開発に最適なコンポーネントセット - ComponentOne Studio for WinForms | グレープシティ コンポーネント製品]</ref>。
'''Windows Forms'''は[[マイクロソフト]]の[[.NET Framework]]に含まれる[[グラフィカルユーザーインターフェイス]][[アプリケーションプログラミングインターフェイス|API]]および[[アプリケーションフレームワーク]]の名称である。日本語版の公式ドキュメント(旧[[Microsoft Developer Network|MSDN]]ライブラリ)では「Windowsフォーム」と表記されている<ref>[https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2008/dd30h2yb(v=vs.90) Windows フォーム | Microsoft Docs]</ref>。「WinForms」と略記されることもある<ref>[http://c1.grapecity.com/superproducts/studiowinforms/ Windowsフォーム開発に最適なコンポーネントセット - ComponentOne Studio for WinForms | グレープシティ コンポーネント製品]</ref>。


== 概要 ==
== 概要 ==
Windows Formsは[[Windows API]]([[Graphics Device Interface|GDI]]/[[Graphics Device Interface#GDI+|GDI+]])を[[マネージコード]]でラップし、[[Microsoft Windows|Windows]]の[[ユーザーインターフェイス]]要素へのアクセスを提供する[[アプリケーションフレームワーク]]である。従来から[[Visual C++]]用に提供されていた、複雑なネイティブ[[C++]]ベースの[[Microsoft_Foundation_Class|MFC]]や、旧[[Visual Basic]](VB6)のフォームにとって代わるものとされる一方で、Windows Formsは[[Model_View_Controller|MVC]]モデルを提供していない。また、[[シェル]]関連など一部のAPIに関してはラッパーが存在しないので、それらをWindows Formsで利用するためには[[C++/CLI]]言語でラッパーアセンブリを作成するか、あるいは[[P/Invoke]]などの手法を用いる必要がある。そのほか、MFCアプリケーションからWindows Formsコントロールを利用するなどのシナリオを想定した相互運用機能も用意されている<ref>[https://docs.microsoft.com/en-us/cpp/dotnet/using-a-windows-form-user-control-in-mfc Using a Windows Form User Control in MFC | Microsoft Docs]</ref><ref>[https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2008/ahdd1h97(v=vs.90) MFC での Windows フォーム ユーザー コントロールの使用 | Microsoft Docs]</ref>。
Windows Formsは[[Windows API]]([[Graphics Device Interface|GDI]]/[[Graphics Device Interface#GDI+|GDI+]])を[[マネージコード]]でラップし、[[Microsoft Windows|Windows]]の[[ユーザーインターフェイス]]要素へのアクセスを提供する[[アプリケーションフレームワーク]]である。従来から[[Visual C++]]用に提供されていた、複雑なネイティブ[[C++]]ベースの[[Microsoft Foundation Class|MFC]]や、旧[[Visual Basic]](VB6)のフォームにとって代わるものとされる一方で、Windows Formsは[[Model View Controller|MVC]]モデルを提供していない。また、[[シェル]]関連など一部のAPIに関してはラッパーが存在しないので、それらをWindows Formsで利用するためには[[C++/CLI]]言語でラッパーアセンブリを作成するか、あるいは[[P/Invoke]]などの手法を用いる必要がある。そのほか、MFCアプリケーションからWindows Formsコントロールを利用するなどのシナリオを想定した相互運用機能も用意されている<ref>[https://docs.microsoft.com/en-us/cpp/dotnet/using-a-windows-form-user-control-in-mfc Using a Windows Form User Control in MFC | Microsoft Docs]</ref><ref>[https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2008/ahdd1h97(v=vs.90) MFC での Windows フォーム ユーザー コントロールの使用 | Microsoft Docs]</ref>。


Windows Formsアプリケーション開発に[[Visual Studio]]を利用することで、.NET以前の[[Visual Basic]]や[[Delphi]]のように、GUI(フォームデザイナー)で簡単かつ効率的に画面作成やGUI部品の詳細な設定を行なうことができる([[RAD (計算機プログラミング環境)|RAD]])。これは、GUI部品の簡単な配置や簡単な設定までしかできないWin32/MFCのダイアログ エディターとは大きく異なる。作成したウィンドウ情報は、リソースファイルに変換されるのではなく、Visual Studio [[統合開発環境|IDE]]によって直接[[C Sharp|C#]]や[[Visual Basic .NET]]などのソースコードに変換して出力される(コード ビハインド)。マネージ言語は[[統合開発環境|IDE]]との親和性が高く、Windows Formsによって生産性の高いGUIアプリケーション開発環境が提供される。
Windows Formsアプリケーション開発に[[Visual Studio]]を利用することで、.NET以前の[[Visual Basic]]や[[Delphi]]のように、GUI(フォームデザイナー)で簡単かつ効率的に画面作成やGUI部品の詳細な設定を行なうことができる([[Rapid Application Development|RAD]])。これは、GUI部品の簡単な配置や簡単な設定までしかできないWin32/MFCのリソースエディターやダイアログエディターとは大きく異なる。GUIによって作成したウィンドウレイアウト情報は、リソースファイルに変換されるのではなく、Visual Studio [[統合開発環境|IDE]]によって直接[[C Sharp|C#]]や[[Visual Basic .NET]]などのソースコードに変換して出力される(コード ビハインド)。マネージ言語は[[統合開発環境|IDE]]との親和性が高く、Windows Formsによって生産性の高いGUIアプリケーション開発環境が提供される。


なお、Windows Formsのターゲット環境はデスクトップ アプリケーションであり、ブラウザで動作するWebアプリケーションを開発するには[[ASP.NET]]などを利用することになる。
なお、Windows Formsのターゲット環境はデスクトップ アプリケーションであり、ブラウザで動作するWebアプリケーションを開発するには[[ASP.NET]]などを利用することになる。
36行目: 36行目:


== 課題と将来性 ==
== 課題と将来性 ==
Windows Formsは.NET Framework 1.0のリリースとともに登場したが、.NET 2.0で機能追加<ref>[https://atmarkit.itmedia.co.jp/fdotnet/special/win20review01/win20review01_01.html @IT:特集 .NET Framework 2.0のWindowsフォーム新機能(前編)]</ref>や仕様変更がなされた後は大きな変化がない。後発のデスクトップアプリケーションフレームワークである[[Windows Presentation Foundation|WPF]]に比べると、[[マルチタッチ]]やDPI Aware<ref>[https://blogs.msdn.microsoft.com/ttanaka/2014/07/24/dpihigh-dpi-2-12398/ アプリの高DPI(High DPI)対応について 第2回 ~ アプリケーションの高DPIへの対応レベル ~ – 田中達彦のブログ]</ref><ref>[https://code.msdn.microsoft.com/windowsapps/Windows-DPI-Aware-e758cbbb Windows フォーム アプリの DPI Aware への変更 言語: XML]</ref>などに標準で対応していないなど、最新の技術動向は反映されにくい傾向にある。.NET 4.5.1, .NET 4.5.2, .NET 4.6, .NET 4.7ではそれぞれ高DPI環境下でのWindows Formsコントロールのリサイズに関する機能が徐々に拡張・改善されているが、既定ではなく[[オプトイン]]である<ref>[https://blogs.msdn.microsoft.com/ttanaka/2014/07/16/dpihigh-dpi-1-dpi/ アプリの高DPI(High DPI)対応について 第1回 ~ 高DPIとは ~ – 田中達彦のブログ]</ref><ref>[https://docs.microsoft.com/en-us/dotnet/framework/whats-new/index What's new in the .NET Framework | Microsoft Docs]</ref>。
Windows Formsは.NET Framework 1.0のリリースとともに登場したが、.NET 2.0で機能追加<ref>[https://atmarkit.itmedia.co.jp/fdotnet/special/win20review01/win20review01_01.html @IT:特集 .NET Framework 2.0のWindowsフォーム新機能(前編)]</ref>や仕様変更がなされた後は大きな変化がない。.NET 3.0で導入され、Windowsのバージョンアップとともに継続的に機能追加がなされた後発のデスクトップアプリケーションフレームワークである[[Windows Presentation Foundation|WPF]]に比べると、[[マルチタッチ]]やDPI Aware<ref>[https://blogs.msdn.microsoft.com/ttanaka/2014/07/24/dpihigh-dpi-2-12398/ アプリの高DPI(High DPI)対応について 第2回 ~ アプリケーションの高DPIへの対応レベル ~ – 田中達彦のブログ]</ref><ref>[https://code.msdn.microsoft.com/windowsapps/Windows-DPI-Aware-e758cbbb Windows フォーム アプリの DPI Aware への変更 言語: XML]</ref>などに標準で対応していないなど、最新の技術動向は反映されにくい傾向にある。.NET 4.5.1, .NET 4.5.2, .NET 4.6, .NET 4.7ではそれぞれ高DPI環境下でのWindows Formsコントロールのリサイズに関する機能が徐々に拡張・改善されているが、既定ではなく[[オプトイン]]である<ref>[https://blogs.msdn.microsoft.com/ttanaka/2014/07/16/dpihigh-dpi-1-dpi/ アプリの高DPI(High DPI)対応について 第1回 ~ 高DPIとは ~ – 田中達彦のブログ]</ref><ref>[https://docs.microsoft.com/en-us/dotnet/framework/whats-new/index What's new in the .NET Framework | Microsoft Docs]</ref>。


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


[[.NET Core]] 3.0では、Windows版限定ではあるがWPFとともにWindows Formsが実装された<ref>[https://docs.microsoft.com/ja-jp/dotnet/core/porting/winforms Windows Forms アプリを .NET Core 3.0 に移植する - .NET Core | Microsoft Docs]</ref>。[[.NET Framework]]のメジャーアップデートは4.8で最後となるが、メンテナンスは継続される。
[[.NET Core]] 3.0では、Windows版限定ではあるがWPFとともにWindows Formsが実装された<ref>[https://docs.microsoft.com/ja-jp/dotnet/core/porting/winforms Windows Forms アプリを .NET Core 3.0 に移植する - .NET Core | Microsoft Docs]</ref>。[[.NET Framework]]のメジャーアップデートは4.8で最後となるが、メンテナンスは継続される。

.NET Frameworkと.NET Core双方の後継となる.NET 5のWindows Formsでは、[[Windows Vista]]で導入されたタスクダイアログのラッパークラスや、強化されたWin32リストビュー機能へのアクセスAPIが追加されるなど、オープンソース開発コミュニティによるプルリクエストを取り込んだ新機能が導入された<ref>[https://www.infoq.com/jp/news/2021/03/WinForms-5/ Windows Forms 5.0の新機能 - InfoQ]</ref><ref>[https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/whats-new/net50 Windows フォーム .NET 5 の新機能 - Windows Forms .NET | Microsoft Learn]</ref>。.NET 6/7/8でも新機能がいくつか追加されており、.NET 9でも新機能の実装が予定されている<ref>[https://devlog.mescius.jp/microsoft-build-2024-windows-development/ Microsoft Build 2024で発表されたWindowsデスクトップ開発まわりの情報 | MESCIUS.devlog - メシウス株式会社]</ref>。


== 脚注 ==
== 脚注 ==

2024年8月10日 (土) 17:39時点における最新版

Windows Formsマイクロソフト.NET Frameworkに含まれるグラフィカルユーザーインターフェイスAPIおよびアプリケーションフレームワークの名称である。日本語版の公式ドキュメント(旧MSDNライブラリ)では「Windowsフォーム」と表記されている[1]。「WinForms」と略記されることもある[2]

概要

[編集]

Windows FormsはWindows APIGDI/GDI+)をマネージコードでラップし、Windowsユーザーインターフェイス要素へのアクセスを提供するアプリケーションフレームワークである。従来からVisual C++用に提供されていた、複雑なネイティブC++ベースのMFCや、旧Visual Basic(VB6)のフォームにとって代わるものとされる一方で、Windows FormsはMVCモデルを提供していない。また、シェル関連など一部のAPIに関してはラッパーが存在しないので、それらをWindows Formsで利用するためにはC++/CLI言語でラッパーアセンブリを作成するか、あるいはP/Invokeなどの手法を用いる必要がある。そのほか、MFCアプリケーションからWindows Formsコントロールを利用するなどのシナリオを想定した相互運用機能も用意されている[3][4]

Windows Formsアプリケーション開発にVisual Studioを利用することで、.NET以前のVisual BasicDelphiのように、GUI(フォームデザイナー)で簡単かつ効率的に画面作成やGUI部品の詳細な設定を行なうことができる(RAD)。これは、GUI部品の簡単な配置や簡単な設定までしかできないWin32/MFCのリソースエディターやダイアログエディターとは大きく異なる。GUIによって作成したウィンドウレイアウト情報は、リソースファイルに変換されるのではなく、Visual Studio IDEによって直接C#Visual Basic .NETなどのソースコードに変換して出力される(コード ビハインド)。マネージ言語はIDEとの親和性が高く、Windows Formsによって生産性の高いGUIアプリケーション開発環境が提供される。

なお、Windows Formsのターゲット環境はデスクトップ アプリケーションであり、ブラウザで動作するWebアプリケーションを開発するにはASP.NETなどを利用することになる。

コード例

[編集]

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) に基づいて公開されている[5][6]。この中にWindows Formsも含まれている[7]。もともと.NET Frameworkはプロプライエタリでソースコードは公開されていなかったが、2007年に.NET Framework 3.5の発表に合わせて公開された[8].NET(旧称.NET Core)のソースコードはMITライセンスに基づいて公開されており、Windows Formsも含まれている[9]

Windows Formsのソースコードの大半はC#を使って記述されており、P/InvokeCOM相互運用を利用してWindows APIを呼び出しているが、一部の実装にVB.NETも使われている[10]。ネイティブ相互運用のテストコードにはC++も使われている[11]

互換実装

[編集]

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

課題と将来性

[編集]

Windows Formsは.NET Framework 1.0のリリースとともに登場したが、.NET 2.0で機能追加[13]や仕様変更がなされた後は大きな変化がない。.NET 3.0で導入され、Windowsのバージョンアップとともに継続的に機能追加がなされた後発のデスクトップアプリケーションフレームワークであるWPFに比べると、マルチタッチやDPI Aware[14][15]などに標準で対応していないなど、最新の技術動向は反映されにくい傾向にある。.NET 4.5.1, .NET 4.5.2, .NET 4.6, .NET 4.7ではそれぞれ高DPI環境下でのWindows Formsコントロールのリサイズに関する機能が徐々に拡張・改善されているが、既定ではなくオプトインである[16][17]

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

しかし、後継となるWPFはMFCやWindows Formsの完全なスーパーセットではなく、一部は同等機能が用意されていない。Win32/MFCやWindows Formsで作成されたコード資産を再利用するため、WPFアプリケーションでもWin32/MFCやWindows Formsとの連携を行なうシナリオを想定した相互運用機能が用意されている[19][20][21][22]

.NET Core 3.0では、Windows版限定ではあるがWPFとともにWindows Formsが実装された[23].NET Frameworkのメジャーアップデートは4.8で最後となるが、メンテナンスは継続される。

.NET Frameworkと.NET Core双方の後継となる.NET 5のWindows Formsでは、Windows Vistaで導入されたタスクダイアログのラッパークラスや、強化されたWin32リストビュー機能へのアクセスAPIが追加されるなど、オープンソース開発コミュニティによるプルリクエストを取り込んだ新機能が導入された[24][25]。.NET 6/7/8でも新機能がいくつか追加されており、.NET 9でも新機能の実装が予定されている[26]

脚注

[編集]
  1. ^ Windows フォーム | Microsoft Docs
  2. ^ Windowsフォーム開発に最適なコンポーネントセット - ComponentOne Studio for WinForms | グレープシティ コンポーネント製品
  3. ^ Using a Windows Form User Control in MFC | Microsoft Docs
  4. ^ MFC での Windows フォーム ユーザー コントロールの使用 | Microsoft Docs
  5. ^ Microsoft Reference Source - .NET Framework
  6. ^ End User License Agreement - MICROSOFT REFERENCE SOURCE LICENSE (MS-RSL)
  7. ^ Microsoft Reference Source - .NET Framework (#System.Windows.Forms)
  8. ^ マイクロソフト、.NET Frameworkライブラリのソースコード公開へ|CodeZine(コードジン)
  9. ^ winforms/LICENSE.TXT at main · dotnet/winforms · GitHub
  10. ^ winforms/src/Microsoft.VisualBasic.Forms/src/Microsoft/VisualBasic at main · dotnet/winforms · GitHub
  11. ^ winforms/src/System.Windows.Forms/tests/InteropTests/NativeTests at main · dotnet/winforms · GitHub
  12. ^ WinForms | Mono
  13. ^ @IT:特集 .NET Framework 2.0のWindowsフォーム新機能(前編)
  14. ^ アプリの高DPI(High DPI)対応について 第2回 ~ アプリケーションの高DPIへの対応レベル ~ – 田中達彦のブログ
  15. ^ Windows フォーム アプリの DPI Aware への変更 言語: XML
  16. ^ アプリの高DPI(High DPI)対応について 第1回 ~ 高DPIとは ~ – 田中達彦のブログ
  17. ^ What's new in the .NET Framework | Microsoft Docs
  18. ^ Visual Studio 2012、2013 で Visual C++ の Windows フォーム アプリケーション テンプレートが削除され、新規に作成できない
  19. ^ WPF and Win32 Interoperation | Microsoft Docs
  20. ^ Walkthrough: Hosting a Windows Forms Control in WPF | Microsoft Docs
  21. ^ WPF と Win32 の相互運用性に関する概要 | Microsoft Docs
  22. ^ チュートリアル : Windows Presentation Foundation での Windows フォーム コントロールのホスト | Microsoft Docs
  23. ^ Windows Forms アプリを .NET Core 3.0 に移植する - .NET Core | Microsoft Docs
  24. ^ Windows Forms 5.0の新機能 - InfoQ
  25. ^ Windows フォーム .NET 5 の新機能 - Windows Forms .NET | Microsoft Learn
  26. ^ Microsoft Build 2024で発表されたWindowsデスクトップ開発まわりの情報 | MESCIUS.devlog - メシウス株式会社

関連項目

[編集]

外部リンク

[編集]