§5 計算(2)2 プログラミング実習
 back next 

【3】 フォーカスの移動(1)

 フォーカスとは、選択されていて入力可能である状態を表す。例えば、テキストボックスにフォーカスがあるときはカーソルが点滅し、ボタンにフォーカスがあるときは点線の枠で囲まれている。
 マウスでテキストボックスやボタンのオブジェクトをクリックすると、そのオブジェクトにフォーカスが移動する。フォーカスを移動する別の方法として、[Tab]キーを使う方法がある。

操作 9 [Tab]キーを押すごとに図のようにフォーカスが移動するようにする。

フォーカスの移動順序

 [Tab]キーでフォーカスが移動する順は、TabIndexプロパティで設定する。
 [Tab]キーでフォーカスを移動させる/させないは、TabStopプロパティで設定する。
@ テキストボックス Data1
Data2
Kotae
TabIndex → 0
TabIndex → 1
TabStop → False
A ボタン KeisanButton
ClearButton
EndButton
TabIndex → 2
TabStop → False
TabStop → False
B ラジオボタン RadioButton1 TabIndex → 3

操作 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】 イベントの取得

 ここまでは、ラジオボタンで演算を選択し、[計算]ボタンがクリックされてから計算していた。次に、ラジオボタンをクリックすると計算されるように処理を追加する。

操作 12 コードウィンドウの上部にあるクラス名を RadioButton1 に、メソッド名を Click に変更する。

操作 13 ラジオボタンのクリックイベントに対応するメソッドを次のように作成する。
 KeisanButton_Clickメソッドのプログラムをコピーすればよい。

    Private Sub RadioButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click, RadioButton4.Click
        Dim x1 As Double, x2 As Double
        If DataCheck2() = False Then
            Exit Sub
        End If
        x1 = Val(Data1.Text)
        x2 = Val(Data2.Text)
        If RadioButton1.Checked = True Then
            Kotae.Text = Str(x1 + x2)
        ElseIf RadioButton2.Checked = True Then
            Kotae.Text = Str(x1 - x2)
        ElseIf RadioButton3.Checked = True Then
            Kotae.Text = Str(x1 * x2)
        ElseIf RadioButton4.Checked = True Then
            Kotae.Text = Str(x1 / x2)
        End If
        Data1.SelectAll()
        Data1.Focus()
    End Sub

 プログラムの下線部は、対応するイベントである。これで、RadioButton1 〜 RadioButton4のクリックイベントすべてに対応することができる。

操作 14 プログラムを実行する。数値1と数値2を入力して、いずれかのラジオボタンをクリックする。

結果 クリックしたラジオボタンの計算の結果が答えの欄に表示される。

 


 ラジオボタンをクリックして選択すると Checked プロパティが True になるので、どのラジオボタンがクリックされたかの判定は簡単である(上のプログラムのとおり)。ほかのオブジェクトの場合は、引数の sender を使って次のように判定する。

    If sender.Equals(RadioButton1) Then
        Kotae.Text = Str(x1 + x2)
    ElseIf sender.Equals(RadioButton2) Then
        Kotae.Text = Str(x1 - x2)
    ElseIf sender.Equals(RadioButton3) Then
        Kotae.Text = Str(x1 * x2)
    ElseIf sender.Equals(RadioButton4) Then
        Kotae.Text = Str(x1 / x2)
    End If


 back next 
 §5 計算(2)2 Copyright©2008 Hiroshi Masuda 

 

 

inserted by FC2 system