プログラミングを試してみたい人向けのC#プログラミングチュートリアル

Windowsフォームアプリの作り方

POINT
  • cscでのコンパイル時に/t:winexeを指定する
  • Windows画面はFormクラスを継承して作成
目次


・スクールは200,000円など高額、Freeksはサブスク型で10,780円から受講可能
・合うか不安でも、Freeksなら入会金0円、いつでも退会可能だから気軽に始められる
・途中で学ぶ言語を変更してもOK、追加料金なし
24時間いつでも質問が可能、現役エンジニアが回答
・学習のみならず、転職支援もサポートあり、転職成功率は94.8%

Windowsフォームアプリとは

Windowsフォームアプリとは、画面があるアプリケーションのことです。
コンソールアプリは文字のみでの表現でしたが、Windowsフォームアプリは画面での表現ができます。
プログラムの方法は、画面を生成するプログラムと画面からのボタンクリックなどのイベントをきっかけに何をするかを示すプログラムを用意していきます。
画面の生成は、コントロールと言われる部品を配置していくことで行います。
コントロールは自作することもできますが、Windows標準のものを使うことで基本的なことは行えます。 では、Windowsフォームアプリのサンプルを紹介していきます。

WindowsフォームでHelloWorldを表示

まずは最初はこれからスタートします。
HelloWorldを表示するサンプルです。

実行結果サンプル

実行すると次のような画面を表示するプログラムを作成します。

HelloWorldをWindowsフォームアプリで表示

プログラム作成

プログラムファイルはメインのProgram.csと画面のForm1.csの2つに分けて作成します。
まずは、次のファイルを同じフォルダに作成してください。

Program.cs
using System;
using System.Windows.Forms;

namespace SampleProgram 
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
Form1.cs
using System;
using System.Windows.Forms;

namespace SampleProgram 
{
    // Formクラスを継承
    public class Form1 : Form
    {
        // ラベルを定義
        private Label label1; 

        // コンストラクタ
        public Form1()
        {
            // ラベル作成
            label1 = new Label();
            // ラベルに表示する文字列
            label1.Text = "Hello World!";
            // 貼りつける場所を指定
            label1.Location = new System.Drawing.Point(60, 100);
            // フォントを20fに指定
            label1.Font = new System.Drawing.Font(label1.Font.OriginalFontName, 20f);
            // フォントに合わせてサイズを自動調整
            label1.AutoSize = true;
            
            // ラベルを画面に貼付け
            this.Controls.Add(label1);
        }
    }
}
Compile.bat
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe ^
  /t:winexe ^
  *.cs
pause

ファイルを作成できたらCompile.batを実行してみましょう。
同じフォルダにProgram.exeが作成されます。
Program.exeを実行して実行結果サンプルの画面が表示されたら成功です。

プログラム解説

作成したプログラムを解説していきます。

cscの/t:winexeオプション

Windowsフォームアプリを作成する場合、コンパイルする際に/t:winexeオプションを付けます。
ファイル「Compile.bat」を参照してください。

Compile.bat
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe ^
  /t:winexe ^
  *.cs
pause

行末に^を付けています。
これは、batファイルのルールで次の行も命令が続くことを意味します。
今回は3行目までが一つの命令になります。

2行目の/t:winexeがコンパイルする際のオプションになります。
これを付けないとcsc.exeはこのプログラムをコンソールアプリとしてコンパイルしようとします。
これを付けることで、今回はWindowsフォームアプリとしてコンパイルしてくれます。

3行目では*.csを指定しています。
*はワイルドカードと言い、この部分は何でも良いよという意味になります。
これによりファイル名の末尾が.csになっているファイルを全てコンパイル対象としています。

メイン処理の内容

次にファイル「Program.cs」のメイン処理の内容を見ていきます。

Program.cs(抜粋)
using System;
using System.Windows.Forms;

namespace SampleProgram 
{

コンソールアプリのサンプルプログラムでは、シンプルにするためにusingやnamespaceを使いませんでした。
Windowsフォームアプリのサンプルプログラムからは、より本格的にするためにusingやnamespaceを使用します。
usingやnamespaceについてはC#の基本ルールを参照してください。

Program.cs(抜粋)
        [STAThread]
        static void Main(string[] args)
        {

Mainメソッドの前に[STAThread]を指定しています。
メソッドに対する属性を指定する場合にこのような記載をします。
[STAThread]属性は、このメソッドをシングルスレッドで動かすことを意味します。
スレッドについては長くなるため、ここでは詳細を省きます。
Windowsフォームアプリケーションの場合にMainメソッドに必ず指定する属性だと考えて下さい。

Program.cs(抜粋)
            Application.EnableVisualStyles();

Application.EnableVisualStyles();は、見た目をWindows XPスタイルにするという意味です。
これをしないとクラシックスタイルとなり、かなり古臭い見た目となります。

Program.cs(抜粋)
            Application.SetCompatibleTextRenderingDefault(false);

Application.SetCompatibleTextRenderingDefault(false);はテキストの描画方式を指定しています。
これを指定すると、画面表示のパフォーマンスが良くなります。

Program.cs(抜粋)
            Application.Run(new Form1());

Application.Run(new Form1());が画面を表示する処理になります。
new Form1()でForm1クラスを生成して、Application.Runに渡しています。
これによりForm1という画面が表示されます。
Form1が閉じるとアプリケーションを終了します。
正確には、Form1が閉じるとApplication.Runの次の処理に進みますが、続く処理がないためそのままアプリケーションが終了します。

Formクラス

次はファイル「Form1.cs」の画面処理の内容を見ていきます。

Form1.cs(抜粋)
    // Formクラスを継承
    public class Form1 : Form
    {

画面はForm(フォーム)クラスを継承して作成します。
今回はForm1というクラスを作成しています。
継承について知りたい場合はクラスを継承するを参照してください。

コントロールの配置

今回はLabel(ラベル)というコントロールを使用しています。
文字列を表示するコントールです。

Form1.cs(抜粋)
        // ラベルを定義
        private Label label1; 

クラス変数としてLabelを定義しています。
これを画面上に配置することで"Hello World!"という文言を表示します。

Form1.cs(抜粋)
        // コンストラクタ
        public Form1()
        {

コントロールの配置はフォームのコンストラクタで行います。
コンストラクタはクラスの生成時に実行されるメソッドです。
詳細はクラスの作り方を参照してください。

Form1.cs(抜粋)
            // ラベル作成
            label1 = new Label();
            // ラベルに表示する文字列
            label1.Text = "Hello World!";
            // 貼りつける場所を指定
            label1.Location = new System.Drawing.Point(60, 100);
            // フォントを20fに指定
            label1.Font = new System.Drawing.Font(label1.Font.OriginalFontName, 20f);
            // フォントに合わせてサイズを自動調整
            label1.AutoSize = true;

上記の部分でラベルを生成して、ラベルの設定を行っています。
Textに対して文字列をセットすると、ラベルはその文字列を表示します。

Locationで表示する位置を指定します。
位置はSystem.Drawing.Pointクラスを生成してセットすることで指定します。
60が左からの位置、100が上からの位置です。

Fontの指定は、System.Drawing.Fontクラスを生成してセットして行います。
Fontクラス生成の第1引数にフォント名を指定しますが、今回はラベルのデフォルトフォントをそのまま使用するようlabel1.Font.OriginalFontNameを指定しています。
第2引数にフォントサイズを指定します。フォントサイズは数値の後ろにfを付けます。

AutoSizeをtrueにすることで、Textの内容に合わせてラベルのサイズを自動調整されるようにしています。

Form1.cs(抜粋)
            // ラベルを画面に貼付け
            this.Controls.Add(label1);

作ったラベルをフォームのコントロールに追加しています。
これによりフォーム上にラベルが表示されます。