テキストボックスが単一行(MultilineプロパティがFalse)の場合、エンターキーやエスケープキーを押すと、Beep音が鳴ります。これを防ぐ方法をいくつか紹介します。
EnterやEscapeキーが押された時に、KeyPressイベントハンドラでKeyPressEventArgs.HandledをTrueにすれば、ビープ音が鳴らなくなります。
'KeyPressイベントハンドラ Private Sub TextBox1_KeyPress(ByVal sender As Object, _ ByVal e As KeyPressEventArgs) _ Handles TextBox1.KeyPress 'EnterやEscapeキーでビープ音が鳴らないようにする If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) OrElse _ e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Escape) Then e.Handled = True End If End Sub
//KeyPressイベントハンドラ private void TextBox1_KeyPress(object sender, KeyPressEventArgs e) { //EnterやEscapeキーでビープ音が鳴らないようにする if (e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.Escape) { e.Handled = true; } }
補足:.NET Framework 2.0からは、KeyDownイベントハンドラでKeyEventArgs.SuppressKeyPressプロパティをTrueにすることによっても、同様のことができます。
フォームのProcessDialogKeyメソッドをオーバーライドして、EnterやEscapeキーが押された時に、何もせずにTrueを返すという方法もあります。
以下のコードは、テキストボックス(TextBox1)のあるフォームのクラスに記述してください。
<System.Security.Permissions.UIPermission( _ System.Security.Permissions.SecurityAction.Demand, _ Window:=System.Security.Permissions.UIPermissionWindow.AllWindows)> _ Protected Overrides Function ProcessDialogKey( _ ByVal keyData As Keys) As Boolean 'TextBox1でEnterを押してもビープ音が鳴らないようにする If TextBox1.Focused AndAlso _ (keyData And Keys.KeyCode) = Keys.Enter Then Return True End If Return MyBase.ProcessDialogKey(keyData) End Function
[System.Security.Permissions.UIPermission( System.Security.Permissions.SecurityAction.Demand, Window = System.Security.Permissions.UIPermissionWindow.AllWindows)] protected override bool ProcessDialogKey(Keys keyData) { //TextBox1でEnterを押してもビープ音が鳴らないようにする if (TextBox1.Focused && (keyData & Keys.KeyCode) == Keys.Enter) { return true; } return base.ProcessDialogKey(keyData); }
この方法は、一行もコードを書く必要がありません。
フォームのAcceptButtonプロパティにボタン(Buttonオブジェクト)が設定されている場合は、Enterキーを押してもビープ音が鳴りません。同じように、フォームのCancelButtonプロパティにボタンが設定されている場合は、Escapeキーを押してもビープ音が鳴りません。
つまり、テキストボックスでEnterキーを押してもビープ音が鳴らないようにするには、フォームのAcceptButtonプロパティに適当なボタンを設定すればよいのです。もしAcceptButtonプロパティに設定したいボタンがフォームに無ければ、とりあえずフォームにButtonコントロールを配置してから、そのボタンをフォームのAcceptButtonプロパティに設定し、ボタンのVisibleプロパティをFalseにして、ボタンを隠します。