|
分類:[VB.NET/VB2005 以降]
お世話になっております。 環境は、VB2005のSP1です。
現在、テキストボックスを継承して機能拡張したコントロール(以下、自作テキストボックス)を作成しております。 KeyDown時に、入力されている値のエラーチェックを行い、 ○エラーがあったらエラーイベントを起こす ○正常処理なら、自作テキストボックスを使っているフォーム側に、KeyDownイベントを発生させる ○フォーム側では、KeyDown時にさらに固有のエラーチェックを行う。 ○自作テキストボックス、固有のエラーチェックともに、エラーが起こった場合はキー入力を無効にする という動作を想定しております。
さて、これらの動作のうち、エラーイベント・KeyDownイベントの発生は解決することができたのですが、エラー後のキー入力の無視ができず、躓いてしまっています。 というのも、エラー時にKeyDownの引数eで、e.Handled = Trueにしても、e.SuppressKeyPress = Trueにしても、画面に入力したキーが反映されてしまうからです。 どうも、エラー時にメッセージボックスを出した際にのみ起きている症状のようなのですが、回避方法がわかりません。 分かる方がいらっしゃいましたら、どうかご教示願います。
コード (TextBox継承クラス側) Public Class Class1 Inherits Windows.Forms.TextBox
'元々のKeyDownをShadowsで殺す Public Shadows Event KeyDown(ByVal sendder As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
'エラー時のイベント Public Event Errored(ByVal sendder As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
Private Sub Class1_KeyDown1(ByVal sendder As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
'エラー処理
if エラー then e.Handled = True e.SuppressKeyPress = True
RaiseEvent Errored(sendder, e) else '正常ならKeyDownを起こす RaiseEvent KeyDown(sendder, e) End Sub End Class
'*************************************** (Form側) Public Class Form1
Private Sub Class1_Errored(ByVal sendder As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Class1.Errored MessageBox.Show("Error") 'メッセージボックスをコメント化すると、文字コードも無視される End Sub
Private Sub Class1_KeyDown(ByVal sendder As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Class1.KeyDown MessageBox.Show("KeyDown") End Sub
End Class
|