宜しくお願い致します。
データ型が「長いテキスト」の「仕様書」テキストボックスに入力した際、
Enterキーを押すと改行になるようにしたいと思っています。
そこで、
Private Sub 仕様書_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Or KeyCode = vbKeySeparator Then
SendKeys "^~"
End If
End Sub
とイベントを作成したところ、改行がずっと続いてしまう変な現象になってしまいました。
どのようにしたら、Enterキーで改行になるのでしょうか?
キークリック(KeyDown)イベント内で、Enterキー押下をSendKeysしたら、それで再びキークリックイベントが発生して、と連鎖して繰り返されることになるのでそうなりますね。
下記のようにフラグを利用して、イベント連鎖を防止して、キー入力をキャンセルしておくといいでしょう。
あるいは、下記のようにイベントプロシージャの付け外ししてもいいでしょう。
ただ、こんなことをしなくても、
テキストボックスの「Enterキー入力時動作」プロパティを「フィールドに行を追加」にしておけば済みますけどね。
hatena様
毎度回答ありがとうございます。助かります。
Sendkeysでまたイベントが発生してしまっていたとは思いませんでした。
また、イベントの解除や割り当てができるなんて知りませんでした。
また勉強になりました。
Me.仕様書.OnKeyDown = ""
Me.仕様書.OnKeyDown = "[イベント プロシージャ]"
テキストボックスの「Enterキー入力時動作」プロパティを「フィールドに行を追加」で、解決なんですね。
今回はこれで対応しようと思います。
(イベントプロシージャ作らなくともよかったんですね。)
ありがとうございました。