フォームアプリのパーツ関連のロジックをクラスライブラリで書きたいというケースはよくありますが、System.Windows.Forms名前空間の導入方法でつまづきがちです。
.NET Frameworkの時代はdll参照で気軽にできたものですが、.NET(.NET Core)環境では方法が変わっています。メモとして残しておきます。
環境
.NET 7.0
導入まで2ステップ
1. プロジェクトのターゲットOSの変更
プロジェクトを右クリック→プロパティ→アプリケーション→ターゲットOSにて、コンボボックスをWindowsに変更します。
動作環境をWindowsに限定するものとなります。Winフォームのパーツを扱うため必須の設定となります.
2. プロジェクトファイルのXMLに加筆
Visual Studioのソリューションエクスプローラーからプロジェクトファイルをダブルクリックするか、ソリューション内のcsprojファイルをテキストエディタ等で開き、次の通り行を追加します。
+記号を付した"UseWindowsForms"を追加しています。
変更前
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
変更後
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
+ <UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
</Project>
3. usingステートメントに追加
ここまでくれば、コード上でSystem.Windows.Forms名前空間を使用できるようになっています。
using System.Windows.Forms; //←追加
namespace ClassLibrary1 {
public class Class1 {
public void Hoge(DataGridView dataGridView) {
//DataGridViewクラスなどをクラスライブラリで利用可能
}
}
}