§5 計算(2)2 | プログラミング実習 |
【3】 フォーカスの移動(1)
フォーカスとは、選択されていて入力可能である状態を表す。例えば、テキストボックスにフォーカスがあるときはカーソルが点滅し、ボタンにフォーカスがあるときは点線の枠で囲まれている。
マウスでテキストボックスやボタンのオブジェクトをクリックすると、そのオブジェクトにフォーカスが移動する。フォーカスを移動する別の方法として、[Tab]キーを使う方法がある。
操作 9 [Tab]キーを押すごとに図のようにフォーカスが移動するようにする。
[Tab]キーでフォーカスが移動する順は、TabIndexプロパティで設定する。
[Tab]キーでフォーカスを移動させる/させないは、TabStopプロパティで設定する。
@ テキストボックス Data1
Data2
KotaeTabIndex → 0
TabIndex → 1
TabStop → FalseA ボタン KeisanButton
ClearButton
EndButtonTabIndex → 2
TabStop → False
TabStop → FalseB ラジオボタン 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
§5 計算(2)2 | Copyright©2008 Hiroshi Masuda |