hatena
hatena
2023/06/15 (木) 22:22:21
キークリック(KeyDown)イベント内で、Enterキー押下をSendKeysしたら、それで再びキークリックイベントが発生して、と連鎖して繰り返されることになるのでそうなりますね。
下記のようにフラグを利用して、イベント連鎖を防止して、キー入力をキャンセルしておくといいでしょう。
Private InkeyEvent As Boolean
Private Sub 仕様書_KeyDown(KeyCode As Integer, Shift As Integer)
If InkeyEvent Then Exit Sub 'イベント連鎖防止
InkeyEvent = True
If KeyCode = vbKeyReturn Or KeyCode = vbKeySeparator Then
KeyCode = 0 'キー入力をなかっことに
SendKeys "^~" 'Ctrl + Enter
End If
InkeyEvent = False
End Sub
あるいは、下記のようにイベントプロシージャの付け外ししてもいいでしょう。
Private Sub 仕様書_KeyDown(KeyCode As Integer, Shift As Integer)
Me.仕様書.OnKeyDown = "" 'イベントプロシージャの割り当てを解除
If KeyCode = vbKeyReturn Or KeyCode = vbKeySeparator Then
KeyCode = 0 'キー入力をなかっことに
SendKeys "^~" 'Ctrl + Enter
End If
Me.仕様書.OnKeyDown = "[イベント プロシージャ]" 'イベントプロシージャの割り当て
End Sub
ただ、こんなことをしなくても、
テキストボックスの「Enterキー入力時動作」プロパティを「フィールドに行を追加」にしておけば済みますけどね。
通報 ...