VB6メモ:テキストボックスの入力キャンセル

VB6のテキストボックスは数値のみの入力を許可したい等の場合、
入力キーをキャンセルする方法があったのでメモしておきます。

VB暦4年でこれを知らなかったことに愕然としました。
今までChangeイベント時に文字列の入力位置を調べて不要文字削除〜みたいな面倒なことをしてました…
無知って怖い…;


以下の例では全ての入力をキャンセルしています。

Private Sub TxtBox_KeyPress(KeyAscii As Integer)
	KeyAscii = 0	'入力キャンセル
End Sub

…そうですよね。
ByValの指定がないので、KeyAsciiは参照渡し(ByRef)の引数なんですよね…。
よくよく考えてみればって感じです…;

以下は、数値以外の場合は入力キャンセルした例になります。

Private Sub TxtBox_KeyPress(KeyAscii As Integer)
	if Not IsNumeric(Chr(KeyAscii)) Then
		KeyAscii = 0		'入力キャンセル
	End if
End Sub

ただし上記の数値以外キャンセルの処理だけだと、BSキーでの文字削除ができなかったり コピー&ペーストされた文字列の入力キャンセルができません。

以下は、数値許可+BSキー許可+貼り付け不可の例になります。
(ただしこの例だけでは右クリックからの貼り付けは防げません;)

Private Sub TxtBox_KeyPress(KeyAscii As Integer)
	'BSキーの場合
	If KeyAscii = vbKeyBack Then
		Exit Sub			'何もしない

	'貼り付け(Ctrl+V)の場合
	ElseIf KeyAscii = 22 Then
		KeyAscii = 0		'入力キャンセル

	'数値の場合
	ElseIf Not IsNumeric(Chr(KeyAscii)) Then
		KeyAscii = 0		'入力キャンセル
	End If
End Sub

ちなみにKeyAsciiに文字コードを渡せば、
対応する文字に置き換えることもできるようです。

Private Sub TxtBox_KeyPress(KeyAscii As Integer)
	KeyAscii = Asc("*")	'何を入力しても「*」を表示する
End Sub


コメント
コメントする








    
この記事のトラックバックURL
トラックバック