コンソールアプリを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プロパティ
TextBoxtextBoxEI   Nameプロパティ
Label外部出力(EO) Textプロパティ
TextBoxtextBoxEO  Nameプロパティ
Label内部論理ファイル(ILF) Textプロパティ
TextBoxtextBoxILF Nameプロパティ
Label外部インタフェースファイル(EIF) Textプロパティ
TextBoxtextBoxEIF Nameプロパティ
Label外部照会(EQ) Textプロパティ
TextBoxtextBoxEQ Nameプロパティ
Label補正係数 Textプロパティ
TextBoxtextBoxCoef Nameプロパティ
ButtonbuttonCalc Nameプロパティ, 計算する Textプロパティ
LabellabelTotal   Nameプロパティ
LabellabelFP    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}";

このように、

計算部分はまったく同じで、

入力と出力だけが変わっています。


実行してみよう

次の値を入力します。

項目
EI2
EO3
ILF1
EIF1
EQ2
補正係数0.80

「計算する」ボタンを押すと、

重み付け合計:48
ファンクションポイント:38.40

と表示されます。


今日のチャレンジ

次の値で試してみましょう。

EIEOILFEIFEQ補正係数
524130.65

重み付け合計とファンクションポイントはいくつになるでしょうか。

まず予想してから、「計算する」ボタンを押して確認してみましょう。


チャレンジの答え

計算すると、

重み付け合計:89
ファンクションポイント:57.85

となります。


まとめ

今回は、昨日作成したコンソールアプリを、Windowsアプリ(WinForms)へ移植しました。

今日覚えてほしいポイントは次の3つです。

  • TextBox は入力するための部品
  • Button はクリックすると処理を実行する部品
  • Label は結果を表示する部品

そして、一番大切なのは、

コンソールアプリで作った計算ロジックは、そのままWindowsアプリでも利用できる

ということです。

画面が変わっても、プログラムの考え方は変わりません。

この「入力 → 計算 → 出力」という流れは、これから作るさまざまなアプリでも共通して使われる、とても大切な考え方です。

訪問数 70 回, 今日の訪問数 70回

広告