投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/6/22 22:51:17
おさむさん:
>> VB6.0以前欄にある「サンプル」ページにあるテキストボックスの、入力出来る文字制限のプログラムは
それは
http://homepage1.nifty.com/rucio/main/Samples/vbsample030.htm
の事でしょうか?


>> ひらがなだけの制限がわかりませんでした。
Private Sub TextBox1_KeyPress(ByVal sender As ObjectByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
    If Not System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar, "\p{IsHiragana}"Then
        e.Handled = True
    End If
End Sub




shuさん:
>> サンプルにあるようにKeyPressで判断するのは少し手間がいると思います。
>> g y a と打たれたら 『ぎゃ』になるので g yだけで駄目と判断は出来ません。
あれ? KeyPress イベントでその動作が発生するのは、どういう時なのでしょうか?

私の認識では:

IME が無効な状態で [g][y][o] の 3 つのキーが入力された場合、
KeyPress イベントは "g", "y", "o" の 3 回発生し、TextBox には『gyo』と書かれる。

IME が有効な状態で [g][y][o][Enter] の 4 つのキーが入力された場合、
KeyPress イベントは "ぎ", "ょ" の 2 回発生し、TextBox には『ぎょ』と書かれる。

だったので手元の環境で再確認してみたのですが、動作はやはり上記の通りで、
ローマ字入力であっても『ぎょ』の入力時に g y が KeyPress に入る事は
ありませんでした。それとも、OS によっては異なる動作になるのでしょうか。




いずれにしても、KeyPress / KeyDown / KeyUp 等の
「キーボード系イベント」だけでは、入力制限としては不十分です。

これはたとえば、「マウス右クリックからの貼り付け」操作や、
「タブレットPCにおいて、文字列がペン入力された場合」には
キーボード系のイベントが一切発生しないためです。

ですから、キーボードからの入力制御は、あくまでも補助的な物として扱い、
最終的には入力後の検証の仕組みも併せて実装しておく必要があるでしょう。