1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C# のコンソールアプリケーションでフォームを使う方法 【Visual Studio】

Posted at

環境

  • Visual Studio 2022 Community
  • .NET 6.0

前提条件

単一のプロジェクトではなく,ソリューションの中にコンソールアプリケーション(以下,コンソールアプリ)のプロジェクトが保存されている.

はじめに

コンソールアプリのプロジェクトでは,フォームデザイナを使うことができない.「新しい項目の追加」ダイアログにも項目がない.

image.png

手打ちでフォームを作成するのは面倒くさいので代替案.

1. フォームアプリケーションのプロジェクトを追加

ソリューションに新しいプロジェクトとして「Windows フォーム アプリ」のプロジェクトを追加する.このプロジェクトにフォームを作成しておく.このときフレームワークのバージョンやターゲットOSなどは,既存のコンソールアプリのプロジェクトに揃える.

フォームとのデータのやり取りは,一番簡単な方法はフォームのクラスに Public 修飾子のメンバ変数を用意して使うこと.

2. プロジェクト参照の追加

コンソールアプリのプロジェクトに「プロジェクト 参照」として,フォームアプリのプロジェクトを追加する.

3. コンソールアプリでフォームを使う

まずメイン関数を修正する.(C# 10.0 の新しい記法は使用不可)

Project.cs
using FormApp; // フォームアプリのプロジェクト名

namespace ConsoleApp // コンソールアプリのプロジェクト名
{
    internal class Program
	{
        // この属性をメイン関数の前に記述.
        [STAThread]
        static void Main()
        {
            // フォームを初期化して表示
            Form1 form = new();
            form.ShowDialog();

            // フォームのインスタンスを破棄
            form.Dispose();
        }
    }
}

おまけ. 見た目を綺麗にする

  • XP Visual スタイルを有効化.(デフォルトだとWindows 98のような見た目)
  • 高DPI環境でのスケーリング対応

コンソールアプリに「アプリケーション マニフェスト ファイル」を追加.デフォルトで色々書かれてると思うので以下の2箇所のコメントアウトを外す.

app.manifest
 <!-- アプリケーションが DPI 対応であり、(以下略) -->

  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
      <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
    </windowsSettings>
  </application>


  <!-- Windows のコモン コントロールとダイアログのテーマを有効にします (Windows XP 以降) -->

  <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="****************"
          language="*"
        />
    </dependentAssembly>
  </dependency>
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?