§5 計算(2) 1 vb2005 | プログラミング実習 [Menu] | |
2つの数値データの四則演算(+,−,×,÷)を計算して結果を表示するプログラムとフォーカスの移動について学習する。
オブジェクト:ラジオボタン(RadioButton)
@:ラベル
入力欄の説明用
A:テキストボックス
データ入力欄
B:ラジオボタン
C:ボタン
【1】 プログラム作成の準備
(1) Windowsアプリケーションを作成するためのプロジェクトを作成する。
プロジェクト名は「計算2」とする。
(2) フォーム(Form1)のプロパティを次のように設定する。
Font.Size 12 (ポイント) Size 400,180 Text 計算2
(3) 上の図を参考にして、必要なオブジェクトを配置し、プロパティを設定する。
@ ラベル (Name) Label1 (Name) Label2 (Name) Label3 Text 数値1 Text 数値2 Text 答え AutoSize True AutoSize True AutoSize True
A テキストボックス (Name) Data1 (Name) Data2 (Name) Kotae Text 0 Text 0 Text 0
B ラジオボタン (Name) RadioButton1 (Name) RadioButton2 (Name) RadioButton3 (Name) RadioButton4 Text 加算 Text 減算 Text 乗算 Text 除算 Checked True
C ボタン (Name) KeisanButton (Name) ClearButton (Name) EndButton Text 計 算 Text クリア Text 終 了
(4) プログラムを保存する。
[ファイル(F)] → [すべてを保存(L)]
(5) プログラムを実行する。
数値は入力できるが、どのボタンをクリックしても何も起こらない。
【2】 計算の処理とラジオボタン
ラジオボタンが複数あるとき、いずれか一つだけをクリックして選択することができる。どのラジオボタンが選択されているかは、Checkedプロパティで調べることができる。選択されていれば True、選択されていなければFalseとなる。
(6) [計算](KeisanButton)のクリックイベントに対応するメソッドを次のように作成する。
Private Sub KeisanButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KeisanButton.Click
Dim x1 As Double, x2 As Double
If DataCheck2() Then 'データをチェック
x1 = Val(Data1.Text) 'データOKのとき
x2 = Val(Data2.Text)
Else
Exit Sub 'データerrorのときプロシージャ終了
End If
If RadioButton1.Checked = True Then 'ラジオボタン1選択(+)
Kotae.Text = Str(x1 + x2)
ElseIf RadioButton2.Checked = True Then 'ラジオボタン2選択(−)
Kotae.Text = Str(x1 - x2)
ElseIf RadioButton3.Checked = True Then 'ラジオボタン3選択(×)
Kotae.Text = Str(x1 * x2)
ElseIf RadioButton4.Checked = True Then 'ラジオボタン4選択(÷)
Kotae.Text = Str(x1 / x2)
End If
End Sub
Private Function DataCheck2() As Boolean 'このメソッドは「計算(1)」
If IsNumeric(Data1.Text) = False Then 'で作成したものと同じ
MsgBox("Error")
Data1.Focus()
Data1.SelectAll()
DataCheck2 = False
Exit Function
End If
If IsNumeric(Data2.Text) = False Then
MsgBox("Error")
Data2.Focus()
Data2.SelectAll()
DataCheck2 = False
Exit Function
End If
DataCheck2 = True
End Function
If文(ElseIf文)の条件式が「○○ = True」のとき、条件式を「○○」のように"= True"の部分を省略して記述しても良い。例えば、ラジオボタン1選択のIf文は次のように記述しても良い。
If RadioButton1.Checked Then
(7) プログラムを実行する。数値1と数値2を入力して、[計算]ボタンをクリックする。
ラジオボタンで選択されている計算の結果が答えの欄に表示される。
(8) [クリア](ClearButton)と[終了](EndButton)のクリックイベントに対応するメソッドを作成する。[クリア]は数値の入力欄と答えの欄の3カ所を0で初期化する。
【3】 フォーカスの移動(1)
フォーカスとは、選択されていて入力可能である状態を表す。例えば、テキストボックスにフォーカスがあるときはカーソルが点滅し、ボタンにフォーカスがあるときは点線の枠で囲まれている。
マウスでテキストボックスやボタンのオブジェクトをクリックすると、そのオブジェクトにフォーカスが移動する。フォーカスを移動する別の方法として、[Tab]キーを使う方法がある。
(9) [Tab]キーを押すごとに図のようにフォーカスが移動するようにする。
[Tab]キーでフォーカスが移動する順は、TabIndexプロパティで設定する。
[Tab]キーでフォーカスを移動させる/させないは、TabStopプロパティで設定する。
次のように、プロパティを設定する。(Name)は変更しない。
テキストボックス (Name) Data1 (Name) Data2 (Name) Kotae TabIndex 0 TabIndex 1 TabStop False
ラジオボタン (Name) RadioButton1 TabIndex 3
ボタン (Name) KeisanButton (Name) ClearButton (Name) EndButton TabIndex 2 TabStop False TabStop False
(10) プログラムを実行する。[Tab]キーでフォーカスを移動する。
図のような順でフォーカスが移動する。
【4】 フォーカスの移動(2)
数値入力には、テンキーを使うと便利だが、[Tab]キーが離れた位置にあるので、[Enter]キーでフォーカスを移動させることができれば便利である。
ボタンにフォーカスがあるとき、[Enter]キーを押すとClickイベントが発生する。
テキストボックスにフォーカスがあるとき、[Enter]キーを押すとKeyDown, KeyPress, KeyUpイベントが発生する。ただし、これらのイベントは[Enter]キー以外のキーでも発生するので、押されたキーが[Enter]キーかどうかを判定する必要がある。
ここでは、KeyPressイベントを利用する。このイベントに対応するメソッドの定義部は次のようになっている。
Private Sub Data1_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Data1.KeyPress
押されたキーのデータは、「e.KeyChar」で参照することができるので、これと[Enter]キーを比較して判定する。[Enter]キーの文字コードは、13であるので「Chr(13)」と記述すると[Enter]キーを表すことになる。Chr関数は文字コードを文字に変換する関数である。
(11) [Enter]キーを押すごとに図のようにフォーカスが移動するようにする。
@ デザインウィンドウでテキストボックスのData1をダブルクリックする。
→ コードウィンドウに切り替わる。コードウィンドウには、TextChangedイベントに対応するメソッドが用意される。
A コードウィンドウの上部にあるメソッド名(下図)をクリックして、KeyPressに変更する。
→ コードウィンドウには、KeyPressイベントに対応するメソッドが用意される。
B KeyPressイベントに対応するメソッドを次のように作成する。
Private Sub Data1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Data1.KeyPress
If e.KeyChar = Chr(13) Then
Data2.SelectAll() 'テキストボックスData2のデータを選択状態に
Data2.Focus() 'テキストボックスData2にフォーカスを設定
End If
End Sub
C デザインウィンドウでテキストボックスのData2をダブルクリックして、Data1と同じようにKeyPressイベントに対応するメソッドを作成する。
Private Sub Data2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Data2.KeyPress
If e.KeyChar = Chr(13) Then
KeisanButton.Focus() '[計算]ボタンにフォーカスを設定
End If
End Sub
D [計算]ボタンで[Enter]キーを押したとき、計算結果を表示してからテキストボックスData1にフォーカスが移動するように、次の命令をKeisanButton_Clickメソッドの最後に追加する。
Data1.SelectAll() 'テキストボックスData1のデータを選択状態に
Data1.Focus() 'テキストボックスData1にフォーカスを設定
§5 計算(2) 1 vb2005 | Copyright©2007 Hiroshi Masuda |