2010. 5.21.
2010. 6. 3. 「メニューの設定変更について」の項を最後に追加
石立 喬

Visual C++ 2010 Express の易しい使い方(3)

――― テキストボックスへ入力して結果をラベルに出力する―――

 ここでは、本格的なWindowsプログラムとは言えないが、Windowsプログラムの基礎となるGUIコントロール部品の「テキストボックス」、「ボタン」などを「フォーム」上に貼り付けて使用する方法を紹介する。IntelliSenseは使えない。

作成するプログラム
 テキストボックス、コンボボックス、ラベル、ボタンを使って、四則演算を行なうプログラムを作成する。
具体的には、テキストボックスを二個設けて数値aとbを入力し、コンボボックスから加減乗除(+、-、*、/)の内の一つを選択し、「実行」ボタンをクリックするとラベル欄に答を表示するものである。

プロジェクトの新規作成とフォームの準備
1)「スタート ページ」ウインドウで、「新しいプロジェクト」をクリックする。
2)「新しいプロジェクト」ウインドウで、左欄から「CLR」、右欄から「Windowsフォーム アプリケーション」を選び、「名前」を「C1004A(一例)」とし、その他はデフォルトのまま、「OK」をクリックする。
3)「フォームデザイナ(Form1.h[デザイン])」ウインドウが開き、「Form1」ができている。
4)「Form1」の中央で右クリックし、「プロパティ」ウインドウの「表示」欄の「Text」を選択し、「Form1」をタイトルの「四則演算」に書き換える。
5)メニューで、「表示」→「その他のウインドウ」→「ツールボックス」を選択し、「ツールボックス」ウインドウを開く。もし、「すべてのWindowsフォーム」が展開されていない場合は、それをクリックして展開する。
 図1に、「すべてのWindowsフォーム」が展開されている「ツールボックス」の一部を示す。アルファベット順に並んでおり、これから使用する「Button」、「ComboBox」などがある。


図1 「ツールボックス」の一部


部品の配置と設定

 ここでは、面倒ではあるが、部品を設定する度に、「ツールボックス」を開く作業を繰り返す必要がある。
 部品の配置は、「ツールボックス」から持ってきて、「フォーム」上の適当な場所にとりあえず乗せておくと良い。後で、全体の配置を考えながら細かく変更できる。
 部品を選択すると、マウスでのドラッグ操作が可能になる。たとえば、テキストボックスの長さは、左右の「□」で調節でき、全体の位置は、テキストボックスの中央にマウスを持ってゆき、十字の矢印が出たときに、ドラッグする。
 位置合わせには垂直または水平の直線(スナップ線)が現れるので、それを参考にする。

◎テキストボックス
 「ツールボックス」から「TextBox」をクリックして選択し、「フォーム」上の希望する場所で再びクリックする。これを2回行い、テキストボックスを二個作る。
◎コンボボックス
 「ComboBox」をクリックして選択し、前述の二つのテキストボックスの間に、一個配置する。できた「ComboBox」の中央で右クリックし、「プロパティ」を選択する。「プロパティ」ウインドウで「データ」欄の「Items」を選択する。右側に四角いアイコンがあるので、これをクリックし、上から、「+」、「-」、「*」、「/」を改行しながら入力し、「OK」をクリックする。さらに、外部から書き換えができないように、同じ「プロパティ」ウインドウの「表示」欄の「DropDownStyle」を選択し、右側の下向き三角形をクリックして、「DropDownList」を選択する。
◎ラベル
 同様に、「Label」を、右側のテキストボックスの右に二個配置する。二個のうち左側に配置した「label1」を右クリックし、「プロパティ」を選択する。「プロパティ」ウインドウの下部にある「Text」を選択し、「label1」の文字を「=」に書き換える。右側の「Label2」は、「label2」の文字を「BackSpace」キーで一旦消してから、再び「スペース」を用いて数個の空白文字を入れて置く(そうしないと、フォーム上の「label2」の位置が分からなくなり、配置移動などで困ることがある)。
◎ボタン
 同様に、「Button」を、フォームの下部中央に一個配置する。できた「button1」を右クリックし、「プロパティ」ウインドウで「Text」欄を「button1」から「実行」に書き換える。

 図2は、以上の手続きにより作成した、「フォームデザイナ」ウインドウ上の「フォーム」を示す。なお、「フォーム」の縦方向の長さを、マウスドラッグにより短縮してある。このままでは、プログラムを記述していないので、正常にビルドできるが、動作しない。
 なお、図2では、「label2」をクリックして選択し、配置場所が見えるようにしてある。ラベルサイズは、あらかじめ十分な長さにする必要はない。入力される文字列の長さにより伸縮する。


図2 「Form1.h[デザイン]」ウインドウで作成された「フォーム」


プログラム作成に当たって必要な予備知識

◎テキストボックスの使用方法
 テキストボックス入力を読み取るには、
    string1=textBox1->Text;
 テキストボックスに表示するには、
    textBox1->Text=string1;
などを用いる。
 テキストボックスとやりとりできるのは文字列に限るので、文字列と数値との変換が必要である。
 文字列から数値への変換には、
    a=double::Parse(textBox1->Text);
 数値から文字列への変換には、
    textBox1->Text=a.ToString();
などを用いる。
◎コンボボックス(ドロップダウンメニュー)の使用方法
 コンボボックスの選択位置(インデックス番号)を読み取るには、
    n=comboBox1->SelectedIndex;
を用いる。一番上が選ばれている場合は、n=0になる。
 コンボボックスのインデックス番号を指定するには、
    comboBox1->SelectedIndex=0;
などを用いる。デフォルトとして設定する場合には、プログラムが起動して最初に実行されるForm1_Load()メソッドに記述しておく。
◎ラベルの使用方法
 ラベルに文字列string1を表示するには、
    label1->Text=string1;
を用いる。
◎ボタンの使用方法
 「フォーム」上の「ボタン」をダブルクリックすると、「コードエディタ」にbutton1_Click()などのメソッドのスケルトンができるので、そこに必要なコードを記述する。

プログラムの作成
◎「実行」ボタンをクリックした時に実行するプログラム
「フォーム」上の「実行」ボタン(button1)をダブルクリックすると「コードエディタ」ウインドウが開き、button1_Click()メソッドのスケルトンができているので、図3のように記述する。switchi文の「case」は、自動的にインデント(字下げ)されない。


図3 「実行」ボタン(button1)がクリックされた時に実行するプログラム


 「Form1.h」プログラムに直接、位置や寸法を入力し、書き換えることもできる。この方が、フォーム上に部品を正確に揃えて配置するのに役立つ。ただし、「このメソッドの内容をコードエディタで変更しないで下さい」とあり、慣れないうちは、十分注意して、間違えないようにする必要がある。図4は、その一例で、「textBox1」と「textBox2」の記述の部分を示す。「Form1.h」の、「namespace C1004A{」で始まる上方部分にある。
 
 
 
 図4 コントロール部品の記述の一例


◎プログラムを起動した時に一度だけ実行するプログラム
「Form1.h[デザイン]」タブを選択して、再び「フォームデザイナ」ウインドウに戻って、「フォーム」上の中央部(コントロールの配置していない場所)をダブルクリックすると、Form1_Load()メソッドのスケルトンが現れるので、図5のように記述する。Form1_Load()メソッドは、プロジェクトが呼び出されると、最初に一度だけ実行されるので、これを用いて、「Combobox」で、「+」がデフォルトで選択されるように初期化する。


図5 プロジェクトが呼び出されたときに、最初に一度だけ実行するプログラム


プログラムのビルドと実行

 「統合開発環境」のメニューから、「デバッグ」→「ソリューションのビルド」を選択し、「出力」ウインドウでの正常終了を確認した後、「Ctrl」+「F5」を押す(少し趣旨が違うが、「デバッグ」→「デバッグ開始」を選択しても良い)と、「フォーム」が画面上に表示される。図6は、テキストボックスに適当な数値を入力し、コンボボックスで除算を選択し、「実行」ボタンをクリックした結果を示す。
 ゼロ割りをするとどうなるかが心配であったが、「+∞」、「-∞」、「NaN(非数値)」(0/0の場合)などとそれぞれ表示され、エラーにはならなかった。


図6 プログラムの実行結果

メニューの設定変更について
 「統合開発環境」のメニューから、「ツール」→「設定」で、「基本設定」にチェックが付いているのを「上級者用の設定」に変更すると、メニューに「ビルド」が追加される。
 従来の「デバッグ」→「ソリューションのビルド」ではなく、「ビルド」→「ソリューションのビルド」に変わる。実行には、「デバッグ」→「デバッグなしで開始」が使えるようになる。
 「上級者用の設定」と言われると、初心者はビビッてしまうが、何のことは無い、「Visual C++ 2008」では、最初からそうなっていた。


「Visual C++ の勉強部屋」(目次)へ