コンソールアプリをWindowsアプリにしてみよう!WinFormsでファンクションポイント計算機を作る
昨日は、コンソールアプリでファンクションポイント計算機を作りました。
今日は、そのプログラムをWindowsアプリ(WinForms)にしてみましょう。
実は、中の計算はほとんど変わりません。
変わるのは、
- 入力方法
- 結果の表示方法
だけです。
今日の完成イメージ
画面には次のような入力欄を作ります。

新しいプロジェクトを作ろう
Visual Studio を起動し、
Windows フォームアプリ
を選択します。
プロジェクト名は
FunctionPointCalculatorWinForms
にしましょう。
昨日作成した
FunctionPointCalculator
とは別プロジェクトになります。
コンソール版との違い
昨日は、このように入力していました。
Console.ReadLine();
結果は
Console.WriteLine();
で表示しました。
今日は次のようになります。
| コンソール版 | WinForms版 |
|---|---|
| Console.ReadLine() | TextBox.Text |
| Console.WriteLine() | Label.Text |
| Enterキー | ボタンをクリック |
つまり、
計算式はそのままで、入力と出力だけが変わります。
コントロールを配置しよう
フォームへ次の部品を配置します。
| コントロール | Nameプロパティ、Textプロパティ |
|---|---|
| Label | 外部入力(EI) Textプロパティ |
| TextBox | textBoxEI Nameプロパティ |
| Label | 外部出力(EO) Textプロパティ |
| TextBox | textBoxEO Nameプロパティ |
| Label | 内部論理ファイル(ILF) Textプロパティ |
| TextBox | textBoxILF Nameプロパティ |
| Label | 外部インタフェースファイル(EIF) Textプロパティ |
| TextBox | textBoxEIF Nameプロパティ |
| Label | 外部照会(EQ) Textプロパティ |
| TextBox | textBoxEQ Nameプロパティ |
| Label | 補正係数 Textプロパティ |
| TextBox | textBoxCoef Nameプロパティ |
| Button | buttonCalc Nameプロパティ, 計算する Textプロパティ |
| Label | labelTotal Nameプロパティ |
| Label | labelFP Nameプロパティ |
画面は完成図を参考に配置しましょう。
ボタンをダブルクリックしよう
「計算する」ボタンをダブルクリックすると、
private void buttonCalc_Click(object sender, EventArgs e)
{
}
が自動で作られます。
この中へ昨日の計算を書いていきます。
昨日のコードを移植しよう
昨日作ったコードはこちらでした。
Console.Write("外部入力(EI):");
int ei = Convert.ToInt32(Console.ReadLine());
Console.Write("外部出力(EO):");
int eo = Convert.ToInt32(Console.ReadLine());
Console.Write("内部論理ファイル(ILF):");
int ilf = Convert.ToInt32(Console.ReadLine());
Console.Write("外部インタフェースファイル(EIF):");
int eif = Convert.ToInt32(Console.ReadLine());
Console.Write("外部照会(EQ):");
int eq = Convert.ToInt32(Console.ReadLine());
Console.Write("補正係数:");
double coef = Convert.ToDouble(Console.ReadLine());
int total =
ei * 4 +
eo * 5 +
ilf * 10 +
eif * 7 +
eq * 4;
double fp = total * coef;
Console.WriteLine();
Console.WriteLine($"重み付け合計:{total}");
Console.WriteLine($"ファンクションポイント:{fp:F2}");
実は、変更するのは入力と出力だけです。
WinForms版のコード
ボタンのクリックイベントに次のコードを書きます。
private void buttonCalc_Click(object sender, EventArgs e)
{
int ei = Convert.ToInt32(textBoxEI.Text);
int eo = Convert.ToInt32(textBoxEO.Text);
int ilf = Convert.ToInt32(textBoxILF.Text);
int eif = Convert.ToInt32(textBoxEIF.Text);
int eq = Convert.ToInt32(textBoxEQ.Text);
double coef = Convert.ToDouble(textBoxCoef.Text);
int total =
ei * 4 +
eo * 5 +
ilf * 10 +
eif * 7 +
eq * 4;
double fp = total * coef;
labelTotal.Text = $"重み付け合計:{total}";
labelFP.Text = $"ファンクションポイント:{fp:F2}";
}
どこが変わったの?
入力部分を比べてみましょう。
コンソール版
int ei = Convert.ToInt32(Console.ReadLine());
WinForms版
int ei = Convert.ToInt32(textBoxEI.Text);
結果表示も同じです。
コンソール版
Console.WriteLine($"重み付け合計:{total}");
WinForms版
labelTotal.Text = $"重み付け合計:{total}";
このように、
計算部分はまったく同じで、
入力と出力だけが変わっています。
実行してみよう
次の値を入力します。
| 項目 | 値 |
|---|---|
| EI | 2 |
| EO | 3 |
| ILF | 1 |
| EIF | 1 |
| EQ | 2 |
| 補正係数 | 0.80 |
「計算する」ボタンを押すと、
重み付け合計:48
ファンクションポイント:38.40
と表示されます。
今日のチャレンジ
次の値で試してみましょう。
| EI | EO | ILF | EIF | EQ | 補正係数 |
|---|---|---|---|---|---|
| 5 | 2 | 4 | 1 | 3 | 0.65 |
重み付け合計とファンクションポイントはいくつになるでしょうか。
まず予想してから、「計算する」ボタンを押して確認してみましょう。
チャレンジの答え
計算すると、
重み付け合計:89
ファンクションポイント:57.85
となります。
まとめ
今回は、昨日作成したコンソールアプリを、Windowsアプリ(WinForms)へ移植しました。
今日覚えてほしいポイントは次の3つです。
- TextBox は入力するための部品
- Button はクリックすると処理を実行する部品
- Label は結果を表示する部品
そして、一番大切なのは、
コンソールアプリで作った計算ロジックは、そのままWindowsアプリでも利用できる
ということです。
画面が変わっても、プログラムの考え方は変わりません。
この「入力 → 計算 → 出力」という流れは、これから作るさまざまなアプリでも共通して使われる、とても大切な考え方です。










ディスカッション
コメント一覧
まだ、コメントがありません