§5 計算(2) 1 vb2005 プログラミング実習 [Menu]
 back next 

 2つの数値データの四則演算(+,−,×,÷)を計算して結果を表示するプログラムとフォーカスの移動について学習する。
 オブジェクト:ラジオボタン(RadioButton)

計算2プログラム @:ラベル
   入力欄の説明用
 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]キーを押すごとに図のようにフォーカスが移動するようにする。

フォーカスの移動2
@ デザインウィンドウでテキストボックスの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にフォーカスを設定



 back next 
 §5 計算(2) 1 vb2005 Copyright©2007 Hiroshi Masuda 
inserted by FC2 system