アマゾンバナーリンク

windowsプログラミング入門

2019年12月16日

前回最低限の仕様を勉強したので今回はwindowsアプリケーションで電卓を作ります。 それではVisualStudio2019を開いて新しいプロジェクトを作成しましょう。

プロジェクト作成

以下の図を参考にWindowsフォームアプリケーションを選択して次へを選ぶ。
新しいプロジェクトを構成の画面はそのまま何もいじらないで作成してOKです。

windowsフォームデザイナ

すると以下の様な画面になります。
ここで覚えていてほしいのは

  • ソリューションエクスプローラー
  • windowsフォームデザイナ
  • ツールボックス
  • プロパティウィンドウ
  • 出力ウィンドウ
  • タブ

以上の機能です。

ソリューションエクスプローラー

デザイナやソースファイルの構成を表します。
ここで選んだファイルのデザイナやソースファイルが表示されます。
もし、表示されてなければ、表示→ソリューションエクスプローラーで表示されます。

windowsフォームデザイナ

windowsアプリケーションを直感的に操作できる仕様のデザイナです。
ここに部品を配置したり、プログラムを書くことによってアプリケーションを作ることができます。
もし、表示されてなければ、ソリューションエクスプローラーのForm1.csをクリックすると表示されます。

ツールボックス

ここにあるツールボックスのパーツをwindowsフォームデザイナにドラッグ&ドロップすることによって、パーツを配置できます。大抵の配置したパーツはダブルクリックすることによって自動的に関数が書かれて、そこにプログラムを書くことによって、好きな動作をさせることができます。
もし、表示されてなければ、表示→ツールボックスで表示させることができます。

プロパティウィンドウ

ここではフォームやツールなどの詳細設定が行えます。
もし、表示されてなければ、表示→プロパティウィンドウで表示させることができます。

出力ウィンドウ

デバッグ時にエラーや警告などを表示します。
もし、表示されてなければ、表示→出力で表示させることができます。

タブ

ソリューションエクスプローラーで一度選んだデザイナやソースファイルはここに表示されます。
次回からここをクリックするだけで、すぐにデザイナやソースファイルを表示することができます。

説明は以上です。それではさっそくプログラムを書いていきましょう。

以下の様にツールボックスからTextBoxをドラッグ&ドロップで3つ配置して、その間にLabelを2つ配置してプロパティのTextを「+」と「=」に変更して、ボタンをドラッグ&ドロップで配置します。

次に、windowsフォームデザイナに配置したボタンをダブルクリックすると、以下の様にボタンをクリックしたら、呼び出される関数が自動生成されます。
試しに以下のプログラムを追加してみましょう。

ボタンをクリックしたら、呼び出される関数

private void button1_Click(object sender, EventArgs e)
{
    // これを追加する
    textBox3.Text = textBox1.Text + textBox2.Text;
}

以上を追加したらデバッグ→デバッグなしで開始又はCtrl+F5
試しに1をtextBox1とtextBox2に入れてみましょう。
ですが、1+1=11になってしまいます。なぜでしょうか?

string型は文字列として計算されてしまう

これは文字列同士で足し算してしまっているので、文字列の1と1を足して11になってしまうのです。
これをちゃんと計算できるようにしてみましょう。
ソースコードを以下の様に書き換えます。

//ボタンをクリックしたら、呼び出される関数
private void button1_Click(object sender, EventArgs e)
{
     // これを追加する
     int a = int.Parse(textBox1.Text) + int.Parse(textBox2.Text);
     textBox3.Text = a.ToString();
}
実行結果

この様に一度整数型に変換してから計算して、textBox3に入れるときにまた文字列に変換すれば、足し算できます。 小数点を扱う場合は以下の様にfloat型かdouble型を使います。

しかし、このコードでは文字列が入ってた時にきちんと計算できません。
以下のコードが文字列が入ってたらメッセージボックスでエラーを出して、数字だったら計算した結果をtextBox3に代入します。

  private void button1_Click(object sender, EventArgs e)
    {
        int a, b;

        if (!int.TryParse(textBox1.Text, out a))
        {
            MessageBox.Show("aを数値に変換できませんでした");
            return;
        }
        if (!int.TryParse(textBox2.Text, out b))
        {
            MessageBox.Show("bを数値に変換できませんでした");
            return;
        }

        textBox3.Text = (a+b).ToString();
    }

outというキーワードを使ってますが、これは変数を呼び出した関数内部で変更する際に使うキーワードです。 この場合はint.TryParseがtextBoxのテキストを数字に変換し成功したら変数aや変数bに代入するというものです。 そして、この時にtextBoxに文字列が入ってるとfalseの評価が返ってくるので、その時のみif文の中身が実行されます。(エラーメッセージボックスで出し、returnで終了している)

ちなみに今回のように数字だけ扱いたい場合はTextBoxでなく元々数字のみ入力可能なNumericUpDownを使うと簡単です。
今回はwindowsフォームデザイナの使い方と足し算のみできる計算機を作ってみました。
次回はwindowsフォームデザイナで画像を読み込んでモグラ叩きゲームを作ります。