form_KeyDownでは下記のように指定しています。 If e.KeyCode = Keys.Return Then ’メモの場合は処理を抜ける If Me.ActiveControl.Name = "textMemo" Then Exit Sub End If ’メモ以外の場合は次のコントロールに移動する End If
> If Me.ActiveControl.Name = "textMemo" Then コントロール名で判断するのではなく、 If ActiveControl Is textMemo Then のようにオブジェクト参照で判断するか、あるいは If TypeOf ActiveControl Is TextBox AndAlso DirectCast(ActiveControl, TextBox).Multiline Then のように、Multiline プロパティで判断した方が良いかも。
Protected Overrides Sub OnEnter(ByVal e As System.EventArgs) If Not [ReadOnly] Then ' テキストを選択します。 MyBase.SelectAll() End If MyBase.OnEnter(e) End Sub
Protected Overrides Sub OnLeave(ByVal e As System.EventArgs) If Not [ReadOnly] Then End If MyBase.OnLeave(e) End Sub
End Class
これが何か悪さをしているのでしょうか?
>>If Me.ActiveControl.Name = "textMemo" Then > コントロール名で判断するのではなく、 > If ActiveControl Is textMemo Then > のようにオブジェクト参照で判断するか、あるいは ありがとうございます。上記のように修正しました。
■No33573に返信(ぽち大好きさんの記事)
> If Not [ReadOnly] Then> End If
この If 文は、何の役目も果たしていないように見えますが…?
> ただコントロールが標準のものではありませんでした。
このコードがあったとしても、Enter キーを押しただけで
次のコントロールに移動することはありませんでした。
他にも何か仕掛けが無いでしょうか?
こちらで検証したコードは、下記の通りです。
(既存のプロジェクトではなく)新規プロジェクトに
以下のコードを貼ってみてください。
TextBox2 に対して、Enter キーで改行になりますし、
他のコントロールでも、Enter で移動にはならないはずです。
'--- Form1.vb ---
Public Class Form1
Inherits Form
Private TextBox1 As TextBoxA
Private TextBox2 As TextBoxA
Private TextBox3 As TextBoxA
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Controls.Clear()
TextBox1 = New TextBoxA()
TextBox2 = New TextBoxA() 'textMemo
TextBox3 = New TextBoxA()
KeyPreview = True
TextBox2.Multiline = True
TextBox2.ScrollBars = ScrollBars.Both
TextBox2.WordWrap = False
TextBox2.AcceptsReturn = True
TextBox1.SetBounds(20, 20, 200, 20)
TextBox2.SetBounds(20, 60, 200, 140)
TextBox3.SetBounds(20, 220, 200, 20)
Controls.Add(TextBox1)
Controls.Add(TextBox2)
Controls.Add(TextBox3)
End Sub
Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Return Then
If ActiveControl Is TextBox2 Then
Exit Sub
End If
End If
End Sub
End Class
'--- TextBoxA.vb ---
Public Class TextBoxA
Inherits TextBox
Protected Overrides Sub OnEnter(ByVal e As System.EventArgs)
If Not [ReadOnly] Then
' テキストを選択します。
MyBase.SelectAll()
End If
MyBase.OnEnter(e)
End Sub
Protected Overrides Sub OnLeave(ByVal e As System.EventArgs)
If Not [ReadOnly] Then
End If
MyBase.OnLeave(e)
End Sub
End Class