§2 電圧、電流、抵抗の値を求めるツール VB6 | |
(4) スムースな入力作業(フォーカスの移動、データの範囲選択) |
このようなデータをキーボードから入力するタイプのツールでは、すべての操作がキーボードで行える、すなわちマウスを使わなくても操作できると便利である。
図2-4-1 |
図2-4-1のように、電圧(Text1)のデータを入力してEnterキーを押すと次の抵抗(Text2)にフォーカスが移動し、Text2のデータを入力してEnterキーを押すと計算開始ボタン(Command1)にフォーカスが移動する。Command1にフォーカスが移動するとそのときEnterキーを押すとマウスでクリックしたのと同じことになる。Command1の次はText1にフォーカスが移動するようにする。
フォーカスの移動についてはSetFocusメソッドでできることはすでに説明した。 ここでは入力済みのデータについて考えてみる。
クリアボタンにフォーカスを移動させないので、Text1とText2にフォーカスが移動し、そこにデータが入っていたときはデータを範囲選択の状態にする。
範囲選択の状態でEnterキーを押すとデータはそのままで次にフォーカスが移動する。同じように、範囲選択の状態でEnterキー以外のキーを押すと範囲選択のデータは消されて新しいデータが入るようになる。
範囲選択の状態にするには、テキストコントロールのSelStartプロパティに範囲選択の開始位置、SelLengthプロパティに範囲選択の長さ(文字数)を代入する。
・プログラムリスト(追加)
Private Sub Command1_Click() Dim ans As Double, sans As String If Option1.Value = True Then '電流計算 <<省略>> Label3.Caption = "抵抗は、" & sans & "[Ω]です。" End If Text1.SelStart = 0 '範囲選択の開始位置 Text1.SelLength = Len(Text1.Text) '範囲選択の文字数 Text1.SetFocus 'フォーカスの移動 End Sub
関数Lenは文字列の長さ(文字数)を得るものである。例えば、Len("ABCDE")は5が得られる。
Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then 'Text1でEnterキーを押したとき Text2.SelStart = 0 '範囲選択の開始位置 Text2.SelLength = Len(Text1.Text) '範囲選択の文字数 Text2.SetFocus 'フォーカスの移動 End If End Sub Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Command1.SetFocus End If End Sub
Text1_KeyPressプロシージャは、Text1でキーを押したときに呼び出される。そのとき押したキーの文字コードが引数KeyAsciiに記憶されている。Enterキーの文字コードは、13(0Dh)である。
=== ポイント ===
テキストボックス内のデータから一部または全部を範囲選択することで、選択した部分を対象にコピーなどの処理をすることができる。範囲選択はマウスのドラッグで行う以外に、プログラムで行うことができる。関係するプロパティをまとめておく。
・SelStart プロパティ … 範囲選択の開始位置を表す値 先頭は0
・SelLength プロパティ … 範囲選択の長さ(文字数)を表す値
・SelText プロパティ … 範囲選択の文字列を表す値
(4) スムースな入力作業(フォーカスの移動、データの範囲選択) | |
Copyright © 2001,2002 Hiroshi Masuda |