§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 

 

 

inserted by FC2 system