EnterキーによるEdit間フォーカス移動(U)          <TOP>


複数のエディットボックス間を「Enter」キーでフォーカス移動させます。

Enter(CrLf)を検知し、次のEditBoxにフォーカスを当てています。

条件

EditBoxは、全て複数行入力 → あり

垂直オートスクロール → あり

文字数制限は、必要文字数+2(CrLfの2文字分)とする。

 

 
'================================================================
'= EnterKeyによるEditBox間移動 
'= Edit1、Edit2、Edit3は
'= 複数行入力(あり)、垂直オートスクロール(あり)
'================================================================
#include "Windows.bi"

Var Shared Edit(2) As Object
For i% = 0 To 2
    Edit(i%).Attach GetDlgItem("Edit" & Trim$(Str$(i% + 1)))
    Edit(i%).SetFontSize 14
Next

#define CrLf Chr$(13, 10)

Var Shared Str(2) As String
Var Shared EPos As Integer

'================================================================
Declare Sub MainForm_Start edecl ()
Sub mainForm_Start()
    Edit(0).SetFocus
End Sub

'================================================================
Declare Sub Edit1_Change edecl ()
Sub Edit1_Change()
    Str(0) = Edit(0).GetWindowText
    EPos = InStr(Str(0), CrLf)
    If EPos <> 0 Then
        Str(0) = Mid$(Str(0), 1, EPos - 1) & Mid$(Str(0), EPos + 2)
        Edit(0).SetWindowText Str(0)
        Edit(1).SetFocus
    End If
End Sub

'================================================================
Declare Sub Edit2_Change edecl ()
Sub Edit2_Change()
    Str(1) = Edit(1).GetWindowText
    EPos = InStr(Str(1), CrLf)
    If EPos <> 0 Then
        Str(1) = Mid$(Str(1), 1, EPos - 1) & Mid$(Str(1), EPos + 2)
        Edit(1).SetWindowText Str(1)
        Edit(2).SetFocus
    End If
End Sub

'================================================================
Declare Sub Edit3_Change edecl ()
Sub Edit3_Change()
    Str(2) = Edit(2).GetWindowText
    EPos = InStr(Str(2), CrLf)
    If EPos <> 0 Then
        Str(2) = Mid$(Str(2), 1, EPos - 1) & Mid$(Str(2), EPos + 2)
        Edit(2).SetWindowText Str(2)
        Edit(0).SetFocus
    End If
End Sub

'================================================================
While 1
    WaitEvent
Wend
Stop
End